知识点

scrapy基本类组件说明

scrapy中的Selector选择器

Scrapy通用爬虫介绍与使用

Scrapy爬虫的主要实现

Scrapy主要通过Spider类来实现爬虫的相关功能,通俗来讲,Spider类定义了爬取某个或某些网站的规则,包括爬取数据和提取数据。

Spider循环爬取步骤如下:

1.通过start_requests()以start_urls中的URL初始化Request,下载完毕后返回Response,作为参数传给回调函数parse。

2.使用parse函数分析Response,可以返回Item对象、dict、Request或一个包含三者的可迭代容器。其中,Request可以经过Scrapy继续下载内容,调用设置的回调函数。

3.在parse函数内使用Selector分析Response,提取相应的数据。

scrapy.Spider爬虫基本类

编写爬虫的脚本(spiders文件夹下)是通过继承scrapy.Spide类来实现的,每个其他的Spider必须继承自该类(包括Scrapy自带的其他Spider以及自定义编写的Spider)。Spider类没有提供什么特殊的功能,仅仅提供了start_requests()的默认实现,读取并请求Spider属性中的start_urls,并根据返回的结果(Resulting Responses)调用Spider的parse方法。

Spider类常用属性(也就是spiders文件夹下的爬虫脚本)

name

name属性是必须且唯一的,其定义了Spider的名字,而Scrapy通过Spider的名字来定位并初始化Spider

allow_domain

该属性可选,其包含允许Spider爬取的域名列表。当中间件OffsiteMiddleWare启用时,将不会跟进不再列表中的域名

start_urls

是一个URL列表列表,当没有指定特定URL时,Spider将从该列表中开始获取页面数据,后续的URL将从获取的数据中提取。

custom_settings

该属性可选,是一个dict。当Spider启动时,会覆盖项目的设置,由于设置必须在初始化前被更新,因此必须设定为class属性。(疑惑)

Selector选择器

选择器列表不一定时列表,还有可能时字符串等数据格式

1.XPath:传入XPath表达式,返回表达式对应节点的选择器列表

2.css:传入CSS表达式,但会表达式对应节点的选择器列表(这里注意获取文本和属性使用的与常用的css表达式不太相同

a::text()/加了括号就必须是键值对形式的数据; a::attr())

3.extract:以列表形式返回被选择元素的Unicode字符串。

4.re():返回通过正则表达式提取的Unicode字符串列表。

通用爬虫

CrawlSpider

是抓取网站常用的Spider,他提供了一个通过指定一些规则来达到跟进链接的方便机制。

这些规则也就是rules属性,他是一个或一组Rule对象,必须写成tuple形式。

每一个Rule对象定义了对目标网站的爬取行为,如果有多个Rule对象匹配了同一个链接,就说明第一个Rule会失效。

XMLFeedSpider

主要用于RSS源订阅内容的抓取。RSS源是基于XML的一种信息聚合技术。在XML文件中,item称为一个node节点。

XMLFeedSpider中的一些属性

iterator:指定迭代器,迭代器主要用于分析数据RSS订阅源。

可用的迭代器有:

iternodes:性能高,基于正则表达式,是默认的迭代器,在属性中不指定的话就默认是他

html:使用Selector加载所有DOM结构进行分析,当数据量大是就会产生性能问题,有点事处理不合理标签是比较有用。

xml:同html一样使用Selector进行分析,同样有性能问题

itertag:指定需要迭代的节点

namespaces:以元组形式组成的列表,定义了Spider处理文档时可用的命名空间。(这个属性有啥用)

XMLFeedspider同样具有可复写的方法

adapt_response(response):此方法在处理分析Response之前被调用,可用于修改Response的内容。此方法返回类型为Response。

parse_node(response,selector):当匹配到节点时,调用此方法进行数据处理。很重要的一点就是此方法必须复写,否则爬虫不会正常工作。该方法必须返回一个Item、Request,或者一个包含Item或Request的迭代器。

process_result(response,result):当爬虫返回抓取结果时调用此方法。多用于在抓取结果传递给框架核心处理前做最好的修改。该方法必须接收一个结果列表和产生这些结果的Response,返回一个包含Item或Request的就跟列表。

CSVFeedSpider

他是每行迭代,而XMLfeedSpider是根据节点来迭代数据。类似的,每行迭代调用的是parse_row()方法。

常用的属性方法如下

delimiter:字段分隔符,默认是英文逗号','

quotechar:CSV字段中如果包含回车、引号、逗号,那么此字段必须用双引号引起来,默认是半角双引号。

headers:CSV文件的标题头,该属性是一个列表

parse_row(response,row):对每一行数据进行处理,接收一个由Response、一个文件标题头组成的字典。

SitemapSpider

允许通过Sitemap发现URL链接来爬取一个网站。

而Sitemap是包含网站所有网址以及每个网址的其他元数据,包括上次更新的时间、更改的频率以及相对于网站上其他网址的重要程度为何等。

常用属性

sitemap_urls:一个包含待爬取url的sitemap列表,也可以指定rebots.txt,表示从rebots.txt中提取url.

sitemap_rules:一个元组列表,形如(regex,callback),其中:

reqex:表示需要从sitemap中提取的url的正则表达式,可以是一个字符串或者正则表达式对象

callback:式处理对应的url的回调方法,提取到对应链接时调用parse函数处理。需要注意的是,相同的链接只会调用第一个方法处理,并且如果此属性并未指定,那所有的链接默认使用parse方法处理。

sitemap_follow:一个指定需要跟进的sitemap的正则表达式列表。当使用Sitemap index files来指向其他sitemap文件的站点时此属性有效。默认情况下,所有的sitemap都会被根进。

sitemap_alternate_links:指定当一个url有可选的链接时是否跟进,有些网站url块内会提供备用网址。


努力拼搏吧,不要害怕,不要去规划,不要迷茫。但你一定要在路上一直的走下去,尽管可能停滞不前,但也要走。