Scrapy中的crawlspider爬虫
crawlspider
- 介绍
- 创建模板
- 具体参数和解释
- 重点在rules中:
- 栗子:
介绍
Scrapy框架中分两类爬虫
Spider类和CrawlSpider类。
crawlspider是Spider的派生类(一个子类),Spider类的设计原则是只爬取start_url列表中的网页,而CrawlSpider类定义了一些规则(rule)来提供跟进link的方便的机制,从爬取的网页中获取link并继续爬取的工作更适合。
简单来说 :就是能够匹配满足条件的url地址 .组成Reuqest对象后自动发送给引擎,同时能够指定callback函数.
就是说 crawlspider爬虫可以按照规则自动获取连接.**
创建模板
scrapy startproject 项目名称
scrapy genspider -t crawl 爬虫名 爬虫运行抓取的域名范围
在项目路径下去运行爬虫
scrapy crawl 爬虫名字
栗子:scrapy genspider -t crawl job_163 hr.163.com
具体参数和解释
import scrapy
from scrapy.linkextractors import LinkExtractor # 连接提取器
from scrapy.spiders import CrawlSpider, Rule # 导入CrawlSpider类,Rule规则# CrawlSpider
class Job163Spider(CrawlSpider):name = 'job_163'allowed_domains = ['hr.163.com']start_urls = ['http://hr.163.com/']# 规则的元祖 规则可以有多个 存放 规则 对象rules = (# 创建了一个规则对象# LinkExtractor: 连接提取对象,allow 跟的是一个正则,根据这个正则表达式从响应中自动的去提取符合规则的url地址# callback: 指定 前面根据连接提取器规则 提取出来的url地址的响应交给哪一个解析函数去处理,接收的是一个方法名的字符串# callback 如果传了 表示需要去解析这个响应# callback 如果没传 表示不需要去解析这个响应# follow: 表示是否跟进,表示根据连接提取器提取出来的url地址的响应,是否还需要按照连接提取器的规则继续去提取url地址Rule(LinkExtractor(allow=r'Items/'), callback='parse_item', follow=True),)def parse_item(self, response):item = {}#item['domain_id'] = response.xpath('//input[@id="sid"]/@value').get()#item['name'] = response.xpath('//div[@id="name"]').get()#item['description'] = response.xpath('//div[@id="description"]').get()return item
重点在rules中:
rules
是一个元组或者是列表,包含的是Rule对象Rule
表示规则,其中包含LinkExtractor,callback和follow
等参数LinkExtractor
:连接提取器,可以通过正则或者是xpath来进行url地址的匹配callback
:表示经过连接提取器提取出来的url地址响应的回调函数,可以没有,没有表示响应不会进行回调函数的处理follow
:连接提取器提取的url地址对应的响应是否还会继续被rules中的规则进行提取,True表示会,Flase表示不会
链接提取器LinkExtractor的更多常见参数
- allow: 满足括号中的’re’表达式的url会被提取,如果为空,则全部匹配
- deny: 满足括号中的’re’表达式的url不会被提取,优先级高于allow
- allow_domains: 会被提取的链接的domains(url范围),如:
['hr.tencent.com', 'baidu.com']
- deny_domains: 不会被提取的链接的domains(url范围)
- restrict_xpaths: 使用xpath规则进行匹配,和allow共同过滤url,即xpath满足的范围内的url地址会被提取,如:
restrict_xpaths='//div[@class="pagenav"]'
栗子:
dp.py
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Ruleclass DgSpider(CrawlSpider):name = 'dg'allowed_domains = ['wz.sun0769.com']start_urls = ['https://wz.sun0769.com/political/index/politicsNewest?id=1&page=1']# 需求 翻页抓取数据 ,在列表页中 不获取数据 ,所有的数据在详情页中获取rules = (# 翻页的规则Rule(LinkExtractor(allow=r'/politicsNewest?id=1&page=\d+'), callback='parse_item', follow=True),# 详情页的规则Rule(LinkExtractor(allow=r'political/politics/index\?id=\d+'), callback='parse_item'),)def parse_item(self, response):item = {}# 标题item['title'] = response.xpath("//p[@class='focus-details']/text()").extract_first()# 这个地方使用return 原因 就是当前去执行一次 parse_item方法 ,获取数据饿时候 就是获取到的 一条 数据# 如果需求取其他数据 则写不同的Xpath# item['title'] = response.xpath("//p[@class='focus-details']/text()").extract_first()# item['title'] = response.xpath("//p[@class='focus-details']/text()").extract_first()# item['title'] = response.xpath("//p[@class='focus-details']/text()").extract_first()return item
翻页规则:
详情页规则:
标题规则:
记得改setting.py
- 修改user_agent
- 修改君子协议
- 打开延迟时间
Scrapy中的crawlspider爬虫相关推荐
- Scrapy框架中的crawlspider爬虫
1 crawlspider是什么 在spider中要寻找下一页的url地址或者内容的url地址,想想是否有简单的方法省略寻找url的过程? 思路: 从response中提取所有的满足规则的url地址 ...
- Scrapy框架的学习(9.Scrapy中的CrawlSpider类的作用以及使用,实现优化的翻页爬虫)
1.CrawlSpider类通过一些规则(rules),使对于链接(网页)的爬取更具有通用性, 换句话说,CrawlSpider爬虫为通用性的爬虫, 而Spider爬虫更像是为一些特殊网站制定的爬虫. ...
- 三十四、Scrapy中的CrawlSpider
@Author:Runsen Scrapy框架中分两类爬虫,Spider类和CrawlSpider类. 目前腾讯招聘的官网改变了,因此本文只能了解,不能实战 创建CrawlSpider模板: scra ...
- 以智联为例,scrapy中的主爬虫为zhilian.py
import scrapy from simulatorspider import items class ZhilianSpider(scrapy.Spider): name = 'zhilian' ...
- 4.基于scrapy的实时电影爬虫开发
在前面搭建好了前后台的基本框架之后,就可以使用websocket+scrapy来开发和用户交互的实时爬虫系统了.基本的思路为:当用户在前台发送请求之后,通过websocket的方式来进行前后台交互,并 ...
- 在scrapy中parse函数里面xpath的内容打印不出来_Scrapy中 CrawlSpider 使用
全站爬取时,有时采用遍历ID的方式,请求量很大,资源消耗很大,而且有可能某些ID已经失效,速度慢,效果不理想:可以试试换成关系网络的方式进行爬取,可能无法抓取全量数据,但是可以抓取比较热门的数据. 在 ...
- scrapy的crawlspider爬虫
1. crawlspider是什么 从response中提取所有的满足规则的url地址 自动的构造自己requests请求,发送给引擎 对应的crawlspider就可以实现上述需求,能够匹配满足条件 ...
- Scrapy中CrawlSpider
Scrapy中CrawlSpider 引入 之前的代码中,我们有很大一部分时间在寻找下一页的URL地址或者内容的URL地址上面,这个过程能够更简单一些吗? 思路 1.从response中提取所有的a标 ...
- 【python爬虫】在scrapy中利用代理IP(爬取BOSS直聘网)
同学们好,我又滚回来更新了,这一次我们要爬取的目标是BOSS直聘,BOSS直聘可以说是反爬虫一个很好的例子了,主要在于如果你访问他的次数过多,他就会出现验证码,要求你通过验证才能继续看,这样还算可以, ...
最新文章
- NVIDIA深度学习Tensor Core性能解析(上)
- Windows下打印utf-8文件
- 大数据到底是不是“算命”?技术大牛们这样说
- python编程入门单例_python实现单例模式怎么写啊?
- 2个通用js树型导航
- centos中mysql操作命令_CentOS系统常用的MySQL操作命令总结
- java小游戏制作(maxfo)
- 玩转3D全息图像!AI即刻生成
- 3dmax推荐用哪个版本,主流好用的版本有哪些?
- 全球及中国菖蒲根提取物行业发展规模及投资方向分析报告2022-2028年
- 1.Android系统源代码目录与系统目录
- SHAMANIC Heil Amazonas-DschungelSHAMA
- 汉堡式折叠html,3种超酷汉堡包菜单按钮变形动画特效
- python新浪股票接口_python 爬虫sina股票数据
- 微信公众号免扫码登录的方法
- 《C++语言基础》网络课程主页
- 计算机毕业设计之家庭理财管理系统的设计与实现
- 按键精灵 html转txt文件,按键精灵怎么把变量输出写入TXT文本
- Logstash原理介绍及应用
- Protues使用教程