普通爬虫有啥意思,我写了个通用Scrapy爬虫

您所在的位置:网站首页 crawls是什么意思 普通爬虫有啥意思,我写了个通用Scrapy爬虫

普通爬虫有啥意思,我写了个通用Scrapy爬虫

#普通爬虫有啥意思,我写了个通用Scrapy爬虫| 来源: 网络整理| 查看: 265

大家好,我是Kuls。今天是来自读者剑南的投稿。

除了钱,大家还比较喜欢什么?当然是全能、万能和通用的人或事物啦,例如:全能、什么都会的员工、万能钥匙、通用爬虫等等。今天我们学习Scrapy通用爬虫,利用Scrapy通用爬虫来获取美食杰网站[1]。

Scrapy通用爬虫 创建Scrapy项目

Scrapy爬虫和Scrapy通用爬虫都是通过以下执行命令来创建Scrapy项目,没什么不同,命令如下所示:

Scrapy startproject Scrapy项目名 Spider爬虫模板

在创建spider爬虫前,我们先看看有什么可用的爬虫模板,执行命令如下所示:

scrapy genspider -l

运行结果如下图所示:

其中:

•basic是我们之前创建Spider的时候,默认使用的爬虫模板,也就是普通的爬虫模板;•crawl模板是最常用于抓取常规网站的爬虫模板,通过指定一些爬取规则来实现页面的提取,很多情况下这个模板的爬取就足够通用;•csvfeed模板是Scrapy最简单的爬虫模板,主要用于解析 CSV 文件,它是以行为单位来进行迭代,每迭代一行调用一次 parse_row() 方法;•xmlfeed模板主要用于处理RSS订阅信息,RSS是一种信息聚合技术,可以让信息的发布和共享更为高效和便捷。

接下来我们主要是讲解最常用的爬虫模板——crawl模板,其他模板我们会在往后的文章里讲解,敬请期待!!!

CrawlSpider

在使用crawl模板前,我们先要了解一下CrawlSpider。

CrawlSpider是Scrapy提供的一个通用Spider,继承自Spider类,除了拥有Spider类的所有方法和属性,它还提供了rules属性和parse_start_url()方法。

其中:

•rules是包含一个或多个Rule对象的列表,我们可以指定一些爬取规则来实现页面的提取;•parse_start_url()是一个可重写的方法,当start_urls里对应的Request得到的Response时,该方法被调用。

创建crawl模板爬虫

crawl模板的通用爬虫通过执行以下命令来创建,以http://quotes.toscrape.com网站为例子,该网站是一个著名作家名言的网站,命令如下所示:

scrapy genspider -t 模板类型 scrapy genspider -t crawl quotes quotes.toscrape.com

当然,我们可以把命令中的crawl改为xmlfeed或者csvfeed,这样就会生成其他类型的爬虫,成功创建后,在spiders文件夹中多了一个quotes.py文件,该文件正是我们创建的spider爬虫,其内容如下所示:

import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider, Rule class QuotesSpider(CrawlSpider): name = 'quotes' allowed_domains = ['quotes.toscrape.com'] start_urls = ['http://quotes.toscrape.com/'] rules = ( Rule(LinkExtractor(allow=r'Items/'), callback='parse_item', follow=True), ) def parse_item(self, response): item = {} #item['domain_id'] = response.xpath('//input[@id="sid"]/@value').get() #item['name'] = response.xpath('//div[@id="name"]').get() #item['description'] = response.xpath('//div[@id="description"]').get() return item

其中:

•class QuotesSpider()是自定义spider类,继承自CrawlSpider•name是定义此爬虫名称的字符串,每个项目唯一的名字,用来区分不同的Spider,启动爬虫时使用scrapy crawl +该爬虫名字;•allowed_domains是允许爬取的域名,防止爬虫爬到其他网站;•start_urls是最开始爬取的url;•rules是爬取规则属性,是一个包含多个Rule对象的列表,该Rule主要用来确定当前页面中的哪些链接需要继续爬取、哪些页面的爬取结果需要哪个方法来解析等。•parse_item()方法是负责解析返回响应、提取数据或进一步生成要处理的请求。

注意:不能修改这个方法的名字,且不能定义parse()方法!!!

在创建Crawl模板的Spider爬虫时,Rule中只展示了最常用的参数,其完整参数如下所示:

Rule(LinkExtractor(allow=r'Items/', deny=(), allowed_domains=(), deny_domains=(), restrict_xpaths=()), callback='parse_item', follow=True, cb_kwargs=None, process_links=None, process_request=None)

Rule常见的参数如下:

•LinkExtractor是一个链接提取对象,它定义了如何从每个已爬取的页面中提取链接并用于生成一个requests对象;•callback是一个可调用对象或字符,和之前定义requests的callback作用一样,•指定链接提取器提取的每个链接交给哪个解析函数去处理;•follow是一个布尔值,它指定是否从使用此规则提取的每个响应中跟踪链接,当callback为None时,follow默认为True,否则为False;•cb_kwargs是字典,其包含了传递给回调用函数的参数;•process_links指定处理函数,从LinkExtractor中获取到链接列表时,该函数将会被调用,主要用于过滤url;•process_request指定哪个函数将会被调用,该规则提取到每个request时都会调用该函数,主要用于过滤request。

LinkExtractor常用的参数如下:

•allow:满足括号中正则表达式的URL会被提取,如果为空,则全部匹配;•deny:满足括号中正则表达式的URL不会被提取,优先级高于allow;•allow_domains:会被提取的链接的domains;•deny_domains:不会被提取的链接的domains;•restrict_xpaths:使用xpath表达式来规则URL地址的范围。

定义rules规则

定义rules规则,也就是确定被提取的URL链接及其范围。

首先我们定义翻页的rules规则,进入名人名言网站[2]并打开开发者工具,如下图所示:

由图可知,翻页的URL存放在



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3