当前位置: 首页 > 工具软件 > crawl-me > 使用案例 >

Scrapy中CrawlSpider

王君墨
2023-12-01

Scrapy中CrawlSpider

引入
之前的代码中,我们有很大一部分时间在寻找下一页的URL地址或者内容的URL地址上面,这个过程能够更简单一些吗?

思路
1、从response中提取所有的a标签对应的URL地中
2、自动的构造自己resquests请求,发送给引擎

生成crawlspider的命令
scrapy genspidr -t crawl 爬虫名字 域名

LinkExtractors链接提取器

使用LinkExtractors可以不用程序员自己提取想要的url,然后发送请求。这些工作都可以交给LinkExtactors,他会在所有爬的页面中找到满足规则的url,实现自动的爬取

class scrapy.linkextractors.LinkExtractor(
    allow = (),
    deny = (),
    allow_domains = (),
    deny_domains = (),
    deny_extensions = None,
    restrict_xpaths = (),
    tags = ('a','area'),
    attrs = ('href'),
    canonicalize = True,
    unique = True,
    process_value = None
)

主要参数讲解 :

  • allow : 允许的url。所有满足这个正则表达式的url都会被提取
  • deny: 禁止的url。所有满足这个正则表达式的url都不会被提取
  • allow_domains: 允许的域名。只有在这个里面指定的域名的url才会被提取
  • deny_domains: 禁止的域名。所有子啊这个里面指定的域名的url都不会被提取

Rule规则类

定义爬虫的规则类

class scrapy.spiders.Rule(
    link_extractor, 
    callback = None, 
    cb_kwargs = None, 
    follow = None, 
    process_links = None, 
    process_request = None
)

主要参数讲解:

  • link_extractor : 一个LinkExtractor对象,用于定义爬取规则
  • callback :满足这个规则的俩,应该要执行哪个回调函数,因为CrawlSpider使用了parse作为回调函数,因此不要覆盖parse作为哦回调函数自己的回调函数
  • follow :指定根据该规则从response中提起的链接是否需要跟进
  • procrss_links : 从link_extractor中获取到链接后会传递给这个函数,用来过滤不需要爬取的链接

注意点

  1. 用命令创建应该crawlspider的模板:scrapy genspidr -t crawl <爬虫名字> <all_domain>,也可以手动创建
  2. CrawlSpidr中不能再有以parse为名字的数据提取方法,这个方法被CrawlSpider用来实现继承URL提取等功能
  3. 一个Rule对象接受很多参数,首先第一个是包含URL规则的LinkExtractor对象,常用的还有callback和follow
  4. callback:连接提取器提取出来的url地对应的响应交给他处理
  5. follow : 连接提取器提取出来的URL地址对应的响应是否继续被rules来过滤
  6. 不指定callback函数的请求下,如果follow为True,满足该rules的URL还会继续被请求
  7. 如果多给Rule都满足某一个URL,会从rules中选择第一个满足的进行操作
 类似资料: