一、 创建CrawlSpider父类的爬虫
- 注意:
运用CrawlSpider父类来进行爬虫的时候不要写parse(self,response)方法
,因为CrawlSpider爬虫实现自动链接的这个功能(通过链接提取器 LinkExtractor来进行相应的操作
)就是通过parse方法进行的,千万不要覆盖父类的parse(self,response)方法(即不要自定义parse(self,response)来进行操作)。 - 命令:
scrapy genspider -t crawl hr.tencent hr.tencent.com(url)
url 就是你想要爬取的网址。 -
注意:分析本地文件是一定要带上路径(scrapy shell默认为本地路径),scrapy shell调试的时候可以加访问的url或者不加。
二、继承CrawlSpider父类中的Rule方法
- Rule用来定义CrawlSpider的爬取规则(是rules元组的元素)
-
参数:
(1)link_extractor:LinkExtractor对象,它定义如何从每个已爬网页面中提取链接(解析链接)。
(2)callback:回调函数(每条规则解析链接地址后调用的函数)。
(3)cb_kwargs :是一个包含要传递给回调函数的关键字参数(是dict形式)。
(4)follow:它指定是否应该从使用此规则提取的每个响应中跟踪链接(继续寻找链接)。
(5)process_links :用于过滤从LinkExtractor对象里面解析出来的链接的回调函数。
(6)process_request:用于过滤请求的回调函数。
三、Rule属性中的LinkExtractor方法
LinkExtractor方法中必须要有allow参数,匹配符合规则的地址。
- LinkExractor也是scrapy框架定义的一个类。
- LinkExractor唯一的目的
是从web页面中提取最终将被跟踪的链接
。 -
我们也可定义我们自己的链接提取器,只需要提供一个名为extract_links的方法,它接收Response对象。并返回scrapy.link.Link对象列表。(不需要yiled,只需要解析链接地址即可,from scrapy.link import Link的列表)。
- LinkExtractor类中的deny=()参数的意思是不允许什么链接地址进行爬取,在LinkExtractor类中必须要有allow=()参数,如果两个参数同时出现的话,如果链接地址都符合则deny参数的优先级高。
- LinkExtractor类中的deny_domains=()是不允许爬取的域名。
- LinkExtractor类中的restrict_xpaths=()进行路径的限定进行爬取(一个地址链接或者一个区域的链接地址的限定)。
- LinkExtractor类中unique=True代表过滤相同的链接地址。
网友评论