Scrapy框架使用2(复习专用) CrawlSpider

CrawlSpider介绍

CrawlSpider就是将符合某种规则的网页进行爬取,规则由自己定义

接上回,以古诗文网为例
https://blog.csdn.net/qq_40595682/article/details/101797355
使用scrapy.Request( , )过于单一,碰到链接形式比较复杂时难以使用
但如果这些链接有某个共同点的话只要定义好一个规则,满足这个特点的链接就进行爬取,那么在书写上和考虑的思路上就简单很多了

CrawlSpider的创建

创建Scrapy工程
scrapy startproject 项目名称
创建CrawlSpider爬虫文件
scrapy genspider -t crawl 爬虫名称 域名

常用的两个类

LinkExtractors链接提取器

不用自己提取url,全部交给LinkExtractors来做。当然自己不能什么也不干,对于LinkExtractors我们需要配置一些参数,来让它爬取满足这些规则的url
在这里插入图片描述
常用的基本就是allow和deny了

Rule规则类

听名字就知道这是设定提取utl规则的类
在这里插入图片描述

创建好后大概是这个样子
这个样子
提示一下,那个allowed_domain那里,.com后面那个/一定不要加,要的是这个网站的域名,加上/应该是属于它的下一级了
之所以parse改名叫parse_item,是由于CrawlSpider底层有个调用的方法就是parse,为了防止冲掉那个方法,改名叫parse_item

爬取微信小程序社区练习

预先准备

预先准备的预先准备

打开settings文件中

ROBOTSTXT_OBEY = False
DEFAULT_REQUEST_HEADERS = {
‘Accept’: ‘text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8’,
‘Accept-Language’: ‘en’,
‘User-Agent’ : ‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3732.400 QQBrowser/10.5.3819.400’
}
DOWNLOAD_DELAY = 1
ITEM_PIPELINES = {
‘CrawlSpiderDemo.pipelines.CrawlspiderdemoPipeline’: 300,
}

目录页

进入社区翻到第二页发现他的链接是这个样子
在这里插入图片描述
把page=2改成1时发现它来到了第一页
在这里插入图片描述
根据这个规则,我们可以知道,只要改变page= 后面那个数字就可以连续爬取每一页

详情页

任意进入一个页面,观察他的url变化
在这里插入图片描述在这里插入图片描述发现这些页面只有articl-xxxx-1中间的xxxx发生变化
那么就可以定义一个规则,爬取这种只有xxxx发生变化,其他部分不改变的链接,但是为了以防万一,把xxxx-1都认为是变化的(虽然找不到这个除了-1之外的数字)

设置爬取规则

目录页

我们肯定从第一页开始爬取嘛,就让第一页作为起始页

设置start_url
start_urls = [‘http://www.wxapp-union.com/portal.php?mod=list&catid=1&page=1’]

设置爬取规则,让rules代替自己干翻页的设置的活
在这里插入图片描述

该链接用到了正则表达式的方式
链接开头的.+代表爬取后面链接之前的任意字符(前面的链接照抄也行,这样就是美观点)
page=\d+,这里的\d也是正则表达式,代表page=后面所有的 数字

这里这个callback代表请求到一个目录页后要干点啥,我们请求到目录页之后肯定就是要爬当前目录下每个详情页,我们肯定要再定义个Rule用来设定爬取当前目录页中每个详情页的信息,所以我们完全可以等爬详情页的时候使用callback爬下一个详情页,这里callback没啥用,删去。
在这里插入图片描述
顺便说一下follow,follow= True就是说如果当前页面下发现了新的url能满足我们定义的那个提取规则(allow= xxx)的话就进行把那些url也纳入待提取的队列中

在这里插入图片描述
我们在第一页时只能看到前十页,但当我们点到第十页时
在这里插入图片描述
会发现更新了几页的目录,follow = True就是这个时候提取11-14页信息的 ,不断往后提取,直到能提取的最后一页

详情页

新增一个Rule,用于爬取详情页
在这里插入图片描述
我们进入到详情页之后得干点啥对吧?要爬点东西,所以进入一个详情页时callback调用了parse_detial函数(parse_item改了个名而已)
当我们进入到详情页时,考虑这样一个问题:如果这个页面有其他链接正好遵守了我们定义的规则(详情页),我们要不要爬取?虽然scrapy有防止重复爬取相同url的机制,但我们这里还是选择不爬,毕竟验证是否重复也耗费了资源,我们就按部就班的爬取吧,让follow =False

爬取我们需要的信息

wxapp_spider.py

xpath弄就可以了,想要啥爬啥,没啥可说的
顺便提一句,CrawlSpider貌似是多线程爬取,所以有时候没法按目录页的顺序爬取
在这里插入图片描述

items.py的设置

在这里插入图片描述

piplines.py的设置

在这里插入图片描述
以上就是全部了,本篇旨在学习CrawlSpider的思路

(第二天下午编辑)昨天晚上无聊靠CrawlSpider做了个琉璃神社全站爬虫的代码,有感兴趣的可以去翻一翻我的下载资源里面

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值