网页数据抓取(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对应的页面中的数据,需要指定回调。其他博客文章的链接

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线