CrawlSpider
在上一篇文章爬虫案例中,我们是自己在解析完整个页面后获取下一页的url,然后重新发送一个请求。有时候我们的需求是:只要满足某个条件的url,都进行爬取。这时候就可以通过CrawlSpider来完成了。
CrawlSpider继承自Spider,只不过是在之前的基础之上增加了新的功能,可以定义爬取的url的规则,以后scrapy碰到满足条件的url都进行爬取,而不用手动的yield Request。
创建CrawlSpider爬虫
之前创建爬虫的方式是通过scrapy genspider [爬虫名字] [域名]
的方式创建的。如果想要创建CrawlSpider爬虫,应该通过以下命令scrapy genspider -t crawl [爬虫名字] [域名]
创建
LinkExtractors链接提取器
使用LinkExtractors就不用程序员自己提取想要的url再发送请求。这些工作都可以交给LinkExtractors,它会在所有爬的页面中找到满足规则的url,实现自动的爬取。
以下对LinkExtractors类做一个简单的介绍:
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都不会被提取
- restrict_xpaths:严格的xpath。和allow共同过滤链接
Rule规则类
定义爬虫的规则类。
以下对这个类做一个简单的介绍:
class scrapy.spiders.Rule(
link_extractor,
callback = None,
cb_kwargs = None,
follow = None,
process_links = None,
process_request = None
)
主要参数讲解:
- link_extractor:一个LinkExtractor对象,用于定义爬取规则
- callback:满足这个规则的url,应该要执行哪个回调函数。因为CrawlSpider使用了parse作为回调函数,因此不要覆盖parse作为回调函数(回调函数名字不要为parse)
- follow:指定根据该规则从response中提取的链接是否需要跟进
- process_links:从link_extractor中获取到链接后会传递给这个函数,用来过滤不需要爬取的链接
微信小程序社区CrawlSpider案例
https://blog.csdn.net/weixin_43040873/article/details/110391567
Scrapy Shell
我们想要在爬虫中使用xpath、beautifulsoup、正则表达式、css选择器等来提取想要的数据。但是因为scrapy是一个比较重的框架。每次运行起来都要等待一段时间。因此要去验证我们写的提取规则是否正确,是一个比较麻烦的事情。因此Scrapy提供了一个shell,用来方便的测试规则。当然也不仅仅局限于这一个功能。
打开Scrapy Shell:
打开cmd终端,进入到Scrapy项目所在的目录,然后进入到scrapy框架所在的虚拟环境中,输入命令scrapy shell [链接]
,就会进入到scrapy的shell环境中。在这个环境中,你可以跟在爬虫的parse方法中一样使用了。
- 可以方便我们做一些数据提取的测试代码
- 如果想要执行scrapy命令,那么毫无疑问,肯定是要先进入到scrapy所在的环境中
- 如果想要读取某个项目的配置信息,那么应该先进入到这个项目中,再执行scrapy shell 命令