教程:Python网络爬虫如何开始采集

优采云 发布时间: 2022-11-30 11:18

  教程:Python网络爬虫如何开始采集

  网络爬虫是一种循序渐进的方法,通过获取网页内容,检查页面内容,找到URL链接,然后找到下一个URL,进而获取该URL对应的网页内容,而这过程不断循环。

  迭代单个域名

  以爬维基百科的Kevin Baco为例,实现简单的数据爬取。代码如下:

  from urllib.request import urlopen

from bs4 import BeautifulSoup

html = urlopen('http://en.wikipedia.org/wiki/Kevin_Bacon')

bs = BeautifulSoup(html, 'html.parser')

for link in bs.find_all('a'):

if 'href' in link.attrs:

print(link.attrs['href'])

  上面的代码获取维基百科网站上的任何页面并提取页面链接。删除我们不需要的条目,进行改进并获取指向条目的链接。代码如下:

  from urllib.request import urlopen

from bs4 import BeautifulSoup

import re

html = urlopen('http://en.wikipedia.org/wiki/Kevin_Bacon')

bs = BeautifulSoup(html, 'html.parser')

for link in bs.find('div', {'id':'bodyContent'}).find_all(

'a', href=re.compile('^(/wiki/)((?!:).)*$')):

if 'href' in link.attrs:

print(link.attrs['href'])

  如果我们要做一个函数getLinks,我们可以使用维基百科词条/wiki/形式的URL链接作为参数,然后以相同的形式返回一个列表,其中收录

词条的所有URL链接。一个调用getLinks的main函数,以一个起始入口为参数,然后从返回的URL列表中随机选择一个入口链接,然后调用getLinks,直到我们主动停止,或者新页面上没有入口链接,程序停止运行.

  改进后的代码如下:

  from urllib.request import urlopen

<p>

" />

from bs4 import BeautifulSoup

import datetime

import random

import re

random.seed(datetime.datetime.now())

def getLinks(articleUrl):

html = urlopen(&#39;http://en.wikipedia.org{}&#39;.format(articleUrl))

bs = BeautifulSoup(html, &#39;html.parser&#39;)

return bs.find(&#39;div&#39;, {&#39;id&#39;:&#39;bodyContent&#39;}).find_all(&#39;a&#39;, href=re.compile(&#39;^(/wiki/)((?!:).)*$&#39;))

links = getLinks(&#39;/wiki/Kevin_Bacon&#39;)

while len(links) > 0:

newArticle = links[random.randint(0, len(links)-1)].attrs[&#39;href&#39;]

print(newArticle)

links = getLinks(newArticle)

</p>

  遍历整个网络

  采集

整个网站是一个非常消耗内存的过程,尤其是在处理大型网站时,最合适的工具是使用数据库来存储采集

的资源。

  数据遍历全网的好处:可以制作站点地图,采集站点数据等。但是一般不会消耗大量的内存资源进行采集,所以这一段意义不大。

  通过互联网采集

  构建网页地图,需要从一个链接跳转到另一个链接,逐步构建网站的地图信息,从而达到合适的站点地图。同时,我们也不能忽视外部链接,从一个链接跳转到另一个链接。场景也时有发生。与以往的单一域名采集相比,互联网采集的难度要高很多。因此,要求我们在搜索信息的方式和采集

信息的方式上要极其灵活,以达到理想的采集

效果。

  在做数据采集之前,最好能够确定自己采集的内容,明确目标,然后根据目标的展示形式进行分析,网站是否会跳转到其他链接,是否继续采集和其他因素。

  如果你采集

了一个网站,有时候你也会考虑到网络重定向的问题。比如我个人博客的原链接是:,但是我做了一个网络重定向,我会重定向到原链接,这样不管是访问哪个链接的本质都是跳转到原链接。这个时候我们需要明白的是,当网络发生重定向时,我们采集

到的URL地址会发生变化。在Python3.X的版本中,我们的urllib会帮我完成。重定向功能。

  用 Scrapy 采集

  Scrapy是一个Python库,可以大大降低我们搜索和识别网页链接的复杂度。它使您可以轻松地采集

有关一个或多个域名的信息。

  爬虫项目使用Scrapy还有一些设置。我们可以从官网下载,也可以用pip安装。检查安装的方法在Python基础系列之前的文章中有提到。这里不做过多阐述。

  

" />

  创建一个项目:

  ➜ python scrapy startproject demourl

New Scrapy project &#39;demourl&#39;, using template directory &#39;/usr/local/lib/python3.6/site-packages/scrapy/templates/project&#39;, created in:

/Users/demo/Project/python/demourl

You can start your first spider with:

cd demourl

scrapy genspider example example.com

  我们看一下目录结构:

  ➜ demourl tree ./

./

├── [drwxr-xr-x] demourl

│ ├── [-rw-r--r--] __init__.py

│ ├── [drwxr-xr-x] __pycache__

│ ├── [-rw-r--r--] items.py

│ ├── [-rw-r--r--] middlewares.py

│ ├── [-rw-r--r--] pipelines.py

│ ├── [-rw-r--r--] settings.py

│ └── [drwxr-xr-x] spiders

│ ├── [-rw-r--r--] __init__.py

│ └── [drwxr-xr-x] __pycache__

└── [-rw-r--r--] scrapy.cfg

4 directories, 7 files

  我们将一一介绍Scrapy的内容。您可以点击关注,及时收到后续更新。

  最新版本:织梦dedecms采集侠V2.9采集插件

  从Test Play Station下载,只需发布它,它是Dream Collector 2.9的最新版本。已授权。

  覆盖破解的文件(共三个文件:彩集侠、收录

和插件)。

  

" />

  插件:直接覆盖网站的根目录

  包括:直接覆盖到网站的根目录

  菜机侠:网站默认后端是 dede,如果你没有修改后台目录就是覆盖下面的 /dede/apps/,如果后台访问路径已经修改,那么将 dede 替换为你修改的名称。示例:如果 dede 已更改为测试,则覆盖 /test/apps/ 目录

  

" />

  您好,此帖子收录

特定内容,请回复并再次查看。

  标签 织梦

CMS

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线