爬虫系列---scrapy全栈数据爬取框架(Crawlspider)
一 简介
crawlspider 是Spider的一个子类,除了继承spider的功能特性外,还派生了自己更加强大的功能。
LinkExtractors链接提取器,Rule规则解析器。
二 强大的链接提取器和规则解析器
1 LinkExtractor 链接提取器
LinkExtractor(
allow=r'Items/',# 满足括号中“正则表达式”的值会被提取,如果为空,则全部匹配。
deny=xxx, # 满足正则表达式的则不会被提取。
restrict_xpaths=xxx, # 满足xpath表达式的值会被提取
restrict_css=xxx, # 满足css表达式的值会被提取
deny_domains=xxx, # 不会被提取的链接的domains。
)
作用:提取response中符合规则的链接
2 Rule:规则解析器
Rule(linkExtractor(allow=r'Items/'),callback='parse_item',follow=True)
-参数介绍
参数1:制定链接提取器
参数2:制定规则解析器解析数据的规则(回调函数)
参数3:是否允许链接提取器继续作用到已经提取到的链接网页上提取新的链接,
默认是True,即继续提取。
3 rules=()
制定不同的规则的解析器。一个Rule,一种提取规则。
三 CrawlSpider整体流程
- 爬取文件首先根据起始url,获取改url的网页内容;
- 链接提取器会根据指定提取规则将步骤1中网页内容中的链接进行提取;
- 规则解析器回根据指定解析规则将链接中的网页内容根据制定规则进行解析;
- 将解析数据封装到item中,然后提交给管道进行持久化存储。
四 实战抽屉全站爬取
- 1 创建项目
scrapy start project ChouTi
- 2 创建爬虫文件
cd Chouti scrapy genspider -t crawl choti chouti.com
- 3 爬虫文件 chouti.py
# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from ChouTi.items import ChoutiItem
#LinkExtractor:链接提取器
#Rule:规则解析器 class ChoutiSpider(CrawlSpider):
name = 'chouti'
# allowed_domains = ['xxx.com']
start_urls = ['https://dig.chouti.com/r/scoff/hot/1'] link=LinkExtractor(allow=r'/r/scoff/hot/\d+')
rules = (
Rule(link, callback='parse_item', follow=True),
) def parse_item(self, response):
# print(response)
div_list=response.xpath('//div[@id="content-list"]/div')
for div in div_list:
content=div.xpath('.//div[@class="news-content"]/div[1]/a[1]/text()').extract_first().strip()
author=div.xpath('.//div[@class="part2"]/a[4]//text()').extract_first()
author="".join(author)
item=ChoutiItem()
item['author']=author
item['content']=content
yield item
注意: 多链接解析器书写方式; class ChoutiSpider(CrawlSpider):
name = 'chouti'
# allowed_domains = ['xxx.com']
start_urls = ['https://dig.chouti.com/r/scoff/hot/1'] link=LinkExtractor(allow=r'/r/scoff/hot/\d+')
link2=LinkExtractor(allow='^/text/$') #增加特定页面提取规则
rules = (
Rule(link, callback='parse_item', follow=True),
Rule(link2, callback='parse_item', follow=True),#允许添加多个规则
)
4 items.py
import scrapy class ChoutiItem(scrapy.Item):
# define the fields for your item here like:
content = scrapy.Field()
author = scrapy.Field()
5 pipelines.py
import pymongo class ChoutiPipeline(object):
conn=None def open_spider(self,spider):
self.conn=pymongo.MongoClient(host='127.0.0.1',port=27017)
def process_item(self, item, spider):
# print(item)
self.conn.spider.chouti.insert(item.__dict__)
return item
6 settings.py
USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36'
ROBOTSTXT_OBEY = False
ITEM_PIPELINES = {
'ChouTi.pipelines.ChoutiPipeline': 300,
}
爬虫系列---scrapy全栈数据爬取框架(Crawlspider)的更多相关文章
- 基于CrawlSpider全栈数据爬取
CrawlSpider就是爬虫类Spider的一个子类 使用流程 创建一个基于CrawlSpider的一个爬虫文件 :scrapy genspider -t crawl spider_name www ...
- 爬虫系列4:Requests+Xpath 爬取动态数据
爬虫系列4:Requests+Xpath 爬取动态数据 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参 ...
- scrapy爬虫系列之二--翻页爬取及日志的基本用法
功能点:如何翻页爬取信息,如何发送请求,日志的简单实用 爬取网站:腾讯社会招聘网 完整代码:https://files.cnblogs.com/files/bookwed/tencent.zip 主要 ...
- Java爬虫系列四:使用selenium-java爬取js异步请求的数据
在之前的系列文章中介绍了如何使用httpclient抓取页面html以及如何用jsoup分析html源文件内容得到我们想要的数据,但是有时候通过这两种方式不能正常抓取到我们想要的数据,比如看如下例子. ...
- 爬虫系列1:Requests+Xpath 爬取豆瓣电影TOP
爬虫1:Requests+Xpath 爬取豆瓣电影TOP [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]: ...
- 爬虫系列3:Requests+Xpath 爬取租房网站信息并保存本地
数据保存本地 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参考前文 爬虫系列2:https://www ...
- 爬虫系列(1)-----python爬取猫眼电影top100榜
对于Python初学者来说,爬虫技能是应该是最好入门,也是最能够有让自己有成就感的,今天在整理代码时,整理了一下之前自己学习爬虫的一些代码,今天先上一个简单的例子,手把手教你入门Python爬虫,爬取 ...
- 爬虫系列2:Requests+Xpath 爬取租房网站信息
Requests+Xpath 爬取租房网站信息 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参考前文 ...
- Python进行拉勾网数据爬取框架与思路
爬取内容 用交互式的方式输入想查询的职位并循环输出职位简要信息,为了方便阅读,本文使用到的变量并不是以目标变量的英文来命名,而是为了方便而取的变量名,各位大牛请谅解.(因贵网站爬取一定量数据后需要登陆 ...
随机推荐
- MetaEditor中MQL使用方法
MT4程序--帮助--MQL5文档,转到网页,切换到中文,点击旁边搜索图标. MetaEditor编辑器,点击相应关键字,按F1键,即可启动MT4对应的MQL4的对应关键字用法帮助.但是英文. 时间序 ...
- 『Kruscal重构树 Exkruscal』
新增一道例题及讲解 Exkruscal \(Exkruscal\)又称\(Kruscal\)重构树,是一种利用经典算法\(Kruscal\)来实现的构造算法,可以将一张无向图重构为一棵具有\(2n-1 ...
- 如何以管理员身份运行cmd
点击屏幕最左下角的“开始”按钮,选择“运行”命令: 在弹出的“运行”对话框中输入“CMD”命令,再单击“确定”按钮: 正常打开了DOS命令提示符窗口了.但是是“user”权限下: 有时,“ ...
- 基础才是重中之重~lock和monitor的区别
回到目录 Monitor的介绍 1.Monitor.Enter(object)方法是获取锁,Monitor.Exit(object)方法是释放锁,这就是Monitor最常用的两个方法,当然在使用过程中 ...
- spring原理案例-基本项目搭建 03 创建工程运行测试 spring ioc原理实例示例
下面开始项目的搭建 使用 Java EE - Eclipse 新建一 Dynamic Web Project Target Runtime 选 Apache Tomcat 7.0(不要选 Apache ...
- 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(13)- 从Serial(1-bit SPI) EEPROM/NOR恢复启动
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Serial EEPROM/NOR恢复启动. 在前几篇里痞子衡介绍的Boot Device都属于主动启 ...
- 痞子衡嵌入式:ARM Cortex-M文件那些事(4)- 可重定向文件(.o/.a)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是嵌入式开发里的relocatable文件(object, library). 前三节课里,痞子衡都是在给大家介绍嵌入式开发中的input文 ...
- js内存深入学习(一)
一. 内存空间储存 某些情况下,调用堆栈中函数调用的数量超出了调用堆栈的实际大小,浏览器会抛出一个错误终止运行.这个就涉及到内存问题了. 1. 数据结构类型 栈: 后进先出(LIFO)的数据结构 堆 ...
- SSH学习
简介 SSH或Secure Shell是一种远程管理协议,允许用户通过Internet控制和修改远程服务器.该服务是作为未加密Telnet的安全替代品创建的,它使用加密技术确保与远程服务器之间的所有通 ...
- Python之celery的简介与使用
celery的简介 celery是一个基于分布式消息传输的异步任务队列,它专注于实时处理,同时也支持任务调度.它的执行单元为任务(task),利用多线程,如Eventlet,gevent等,它们能 ...