crawl spider爬虫

酥酥 发布于 2021-09-18 103 次阅读


 

crawl spider爬虫

 

一、创建方法

在创建爬虫的时候scrapy genspider -t crawl 爬虫名 网址范围

二、结构介绍

与普通spider的区别

  1. 创建出来的spider继承自CrawlSpider

  2. 多了rules字段,根据正则表达式来匹配,结果给到不同的回调方法

  3. 回调方法的名改成了parse_item。名字可以随便改,parse函数不见了


Rule对象
常见参数

Rule(LinkExtractor(allow=),callback,follow)匹配到的url可以是不完整的,crawlspider会自动补全

LinkExtractor:提取url地址用的对象

callback:给到方法。不是必须的

follow:表示当前url的响应是否还会经过rules来提取,也不是必须,默认是false,一般要翻页的话就要True,是否需要跟进(话句话说,此次判断以后的页面在一次回调函数以后还需要回调,往往是翻页以后进入详情页,如果是翻页以后不进入详情页了自然就不用),递归

其他参数

process_link:指定该spider中哪个函数将会被调用,从link_extractor中获取到链接列表时将会调用该函数,该方法主要用来过滤url

process_request:指定该spider中哪个函数将会被调用,该规则提取到每个request时都会调用该函数,用来过滤request

别的完全一样,类似于django的re_path()

三、思路总结

对页面中所有url进行分类,分类规则为正则,主要分成详情页类,翻页类等等,然后使用Rule对象将url请求给到callback指定的函数,函数中进行xpath或者其他方式来提取字段

四、关于链接提取器LinkExtractor

LinkExtractor常见参数
  1. allow:满足的url会被匹配,如果为空就是全部匹配

  2. deny:满足括号中正则表达式的URL一定不会被提取(优先级高于allow)

  3. allow_domains:会被提取链接的domains

  4. deny_domains:一定不会被提取链接的domains

  5. restrict_xpaths:使用xpath,与allow共同过滤

Tips:

  1. CrawlspIder中不能再有以 parse为名字的数据提取方法,这个方法被 CrawlSpider用来实现基础ur提取等功能

  2. CrawlSpider只是给到了一种正则匹配分类的方式,大大减少工作量。他的实现方式依旧可以是多种的,还是可以自定义yield生成请求传参。而且同样是Rules请求构建参数的时候由于是并发执行,是不能传递参数的

  3. 不指定callback函散的请求下,如果follow为True,满足该rule的ur还会继续被请求

  4. 如果多个Rule都满足某一个url,会从rules中选择第一个满足的进行操作,满足一个rules以后就不能满足更多的rules了,所以要明确一点