网页数据抓取(Python爬虫框架CrawlSpider模块的使用综述(2)框架)
优采云 发布时间: 2022-04-09 05:31网页数据抓取(Python爬虫框架CrawlSpider模块的使用综述(2)框架)
Python爬虫5.8——scrapy框架的CrawlSpider模块的使用
概览
本系列文档用于提供Python爬虫技术学习的简单教程。在巩固你的技术知识的同时,如果它恰好对你有用,那就更好了。
Python 版本是 3.7.4
在之前的文章文章中,我们对Scrapy框架进行了全面的介绍,以及一些基础功能的使用教程。让我们开始学习 Scrapy 框架的一些高级用法。
CrawlSpider 简介
上面那个囧百科的爬虫第一种情况,我们解析整个页面后获取到下一页的url,然后重新发送请求。有时候我们想这样做,只要满足一定条件的url一定要爬取。然后我们可以通过 CrawlSpider 为我们做这件事。 CrawlSpider继承自Spider,但是在前一个的基础上增加了新的功能,可以定义爬取url的规则。以后scrapy会抓取满足条件的url,不需要手动yieldRequest()。
CrawlSpider爬虫创建CrawlSpider爬虫
之前创建爬虫的方式是通过scrapy genspider [爬虫名称] [域名]。如果你想创建一个 CrawlSpider 爬虫,你应该使用以下命令创建它:
scrapy genspider -t crawl [爬虫名字] [域名]
链接提取器
在没有程序员的情况下使用 LinkExtractors 提取所需的 url,然后发送请求。所有这些任务都可以交给LinkExtractors,它会在所有爬取的页面中找到符合计划的URL,实现自动爬取。以下是LinkExtractors类的简单介绍:
class scrapy.linkextractors.LinkExtractor {
allow = {
},
deny = {
},
allow_domains = {
},
deny_domains = {
},
deny_extensions = None,
restrict_xpath = {
},
tags = ('a','area'),
attrs = ('href'),
canonicalize = True,
unique = True,
process_value = None
}
主要参数说明:
规则规则类
定义爬虫的规则类。下面是这个类的简单介绍:
class scrapy.spider.Rule {
link_extractor,
callback = None,
cb_kwargs = None,
follow = None,
process_links = None,
process_request = None
}
主要参数说明:
微信小程序社区CrawlSpider用例
根据以下命令创建项目:
# 创建项目
scrapy startproject wxapp
# 创建爬虫
scrapy genspider -t crawl wxapp_spider wxapp-union.com
修改setting.py文件改变和完善爬虫配置,修改items.py文件定义item内容(这两个文件的代码这里就不贴了)。然后在wxapp_spider.py文件中编写如下代码:
# -*- coding: utf-8 -*-
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from wxapp.items import WxappItem
class WxappSpiderSpider(CrawlSpider):
name = 'wxapp_spider'
allowed_domains = ['wxapp-union.com']
start_urls = ['http://www.wxapp-union.com/portal.php?mod=list&catid=2&page=1']
# 定义提取url地址规则
rules = (
# LinkExtractor链接提取器,获取符合要求的url链接地址
# callback 提取出来的url地址的response会交给callback处理
# follow 当前url地址的相应是否重新经过Rules来提取url地址
Rule(LinkExtractor(allow=r'.+mod=list&catid=2&page=\d+'), follow=True),
Rule(LinkExtractor(allow=r'.+article-.+\.html'), callback="parse_detail", follow=False),
)
# parse函数有特殊功能,不能定义,此函数名已被底层使用,不能重新定义覆盖
def parse_detail(self, response):
title = response.xpath('//h1[@class="ph"]/text()').get()
author_p = response.xpath('//p[@class="authors"]')
author = author_p.xpath('.//a/text()').get()
pub_time = author_p.xpath('.//span/text()').get()
content = response.xpath('//td[@id="article_content"]//text()').getall()
item = WxappItem(title=title, author=author, pub_time=pub_time, content=content)
yield item
在pipeline.py中编写相应代码保存数据,允许时查看效果。
爬虫总结
CrawlSpider需要用到LinkExtractor和Rule,这两个东西决定了爬虫的具体方向。
allow 设置规则的方法:为了能够限制到我们想要的url,不要生成和其他url一样的正则表达式。何时使用follow:如果需要在抓取页面时对符合当前条件的url进行follow,则设置为True,否则设置为False。什么情况下需要指定回调:如果这个url对应的页面只是为了获取更多的url,不需要里面的数据,那么可以不指定回调。如果要获取url对应的页面中的数据,需要指定回调。其他博客文章的链接