怎样抓取网页数据(一下CrawlSpider爬虫爬虫)
优采云 发布时间: 2022-04-13 02:26怎样抓取网页数据(一下CrawlSpider爬虫爬虫)
重点是CrawlSpider的学习!!!!!!!!!!!!!
**通过前面的学习我们可以进行一些页面的简单自动话爬取,对于一些比较规则的网站,我们似乎可以用Spider类去应付,可是,对于一些较为复杂或者说链接的存放不规则的网站我们该怎么去爬取呢,接下来的爬虫就是要解决这个问题,而且还可以高度的自动化爬取链接和链接内容**
CrawlSpider 类是另一个用于构建爬虫的类。
*(顺便说一下,我们可以继承四种类来建立我们的scrapy爬虫,他们是:Spider类,CrawlSpider类, CSVFeedSpider类和XMLFeedSpider类,今天我们讲的就是CrawlSpider类建立的爬虫)*
CrawlSpider 类通过一些规则使链接(网页)的爬取更加通用。也就是说,CrawlSpider 爬虫是一般的爬虫,而Spider 爬虫更像是一些特殊的网站 制定的爬虫。
然后我们开始正式讲解CrawlSpider爬虫。. . .
首先我们创建一个爬虫项目:
scrapy startproject crawlspider
这个我们很熟悉了,然后创建一个CrawlSpider爬虫
scrapy genspider -t crawl Crawlspider domain.com
注意上面,我们比Spider爬虫创建时多了一个'-t crawl',它是值爬虫的类
这样我们以后可以在我们的蜘蛛文件中找到这个爬虫
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
class CrawlspiderSpider(CrawlSpider):
name = 'crawlspider'
allowed_domains = ['domain.com']
start_urls = ['http://domain.com/']
rules = (
Rule(LinkExtractor(allow=r'Items/'), callback='parse_item', follow=True),
)
def parse_item(self, response):
i = {}
#i['domain_id'] = response.xpath('//input[@id="sid"]/@value').extract()
#i['name'] = response.xpath('//div[@id="name"]').extract()
#i['description'] = response.xpath('//div[@id="description"]').extract()
return i
以上是打开爬虫后自动生成的一段代码。这段代码对于CrawlSpider爬虫的结构基本上可以说是有了结构。我们可以看到有一个rules属性,这个爬虫继承的类是CrawlSpider。这两点就是和之前文章中提到的蜘蛛爬虫的区别。规则属性使得这个爬虫的核心
所以在开始说我们的实战项目之前,还是先说一下这个规则属*敏*感*词*。
rules属性由若干个Rule对象组成,Rule对象定义了提取链接等操作的规则
那么规则的结构是什么?
Rule 对象有六个属性,它们是:
LinkExtractor(...),用于提取响应中的链接 callback='str',回调函数,用于提取链接,用于提取数据填充itemcb_kwargs,传递给回调函数的参数字典follow=True/ False,对于提取出来的链接是否需要跟process_links,一个函数process_request过滤链接,一个函数过滤链接Request
以上参数都是可选的,除了LinkExtractor,当回调参数为None时,我们称这条规则为“跳板”,即只下载页面,不执行任何动作。它通常用作翻页功能。
我们主要需要解释一下LinkExtractor参数和follow参数:
一、LinkExtractor 参数显然是用来提取链接的。那么他是如何定义提取链接的规则的呢?它有十个参数来定义提取链接的规则,即:
1. allow='re_str':正则表达式字符串,在响应中提取与 re 表达式匹配的链接。
2.deny='re_str':排除正则表达式匹配的链接
3. restrict_xpaths='xpath_str':提取满足xpath表达式的链接
4. restrict_css='css_str':提取满足css表达式的链接
5. allow_domains='domain_str': 允许的域
6.deny_domains='domain_str':排除的域
7. tags='tag'/['tag1','tag2',…]:提取指定标签下的链接。默认情况下,链接将从 a 和 area 标签中提取
8. attrs=['href','src',…]:提取满足属性的链接
9. unique=True/False:链接是否去重
10.process_value:值处理函数,优先级必须大于allow
以上参数可以一起使用,提取同时满足条件的链接
二、跟随参数:
是一个布尔值,用于是否跟随链接的处理。回调为None时,默认跟随链接,值为True;回调不为空时,默认为False,不跟随链接。当然,我们可以根据需要进行赋值,
那么,什么叫跟进,什么叫不跟进呢?
就是你前面定义的规则对于已经提取到的链接的页面是不是在进行一次提取链接。
这很好!那么规则究竟是如何运作的呢?
这样会自动为Rule提取的链接调用parse函数,返回链接的response,然后将response交给回调函数,通过解析填充item的回调函数。
顺便说一句,CrawlSpider 爬虫还有一个 parse_start_url() 方法,用于解析 start_urls 中的链接页面。该方法一般用于有跳板的爬虫解析首页
说了这么多,还是说说我们的爬虫项目吧。使用 CrawlSpider 爬取整个小说网站
我们的目标网站是:笔趣看小说网
这是盗版小说网站,只能在线看,不能下载。