【爬虫开发】爬虫开发从0到1全知识教程第13篇:scrapy爬虫框架【附代码文档】
🏆🏆🏆教程全知识点简介:1.Mongodb数据库包括介绍、mongodb简单使用(mongodb服务端启动、启动mongodb客户端进入mongo shell)。2. scrapy爬虫框架涵盖 ip使用、启动爬虫、停止爬虫、scrapyd webapi。3. Gerapy包含通过Gerapy配置管理scrapy项目。4. appium移动端抓取涉及appium自动控制移动设备、appium-python-client模块安装、初始化获取移动设备分辨率、定位元素提取文本方法、控制抖某音app滑动、自动滑动代码整理。5. 爬虫概述包括爬虫概念、爬虫基础。6. http协议复习涵盖http及https概念区别、爬虫关注的请求头响应头、常见响应状态码、浏览器运行过程。7. requests模块包含requests发送post请求、POST请求练习、requests.session状态保持、课堂测试。8. 数据提取概述涉及响应内容分类、xml认识、html区别、常用数据解析方法。9. 数据提取-jsonpath模块包括jsonpath模块使用场景。10. 数据提取-lxml模块涵盖lxml模块xpath语法、谷歌浏览器xpath helper插件安装使用、xpath节点关系、xpath语法基础节点选择、xpath定位节点提取属性文本内容语法、语法练习、lxml模块安装使用示例。11. Selenium 包含获取当前标签页cookie信息、cookie转化为字典、删除cookie、页面等待。12. 反爬与反反爬涵盖常见反爬手段解决思路、服务器反爬原因、服务器反爬虫类型、反爬虫概念、反爬三个方向、基于身份识别反爬(session发送rKey获取登录信息、 加密、用户名 准备、js2py生成js执行环境)。
📚📚仓库code.zip 👉直接-->: https://gitee.com/yinuo112/Backend/blob/master/爬虫/爬虫开发从0到1全知识教程/note.md 🍅🍅
✨ 本教程项目亮点
🧠 知识体系完整:覆盖从基础原理、核心方法到高阶应用的全流程内容
💻 全技术链覆盖:完整前后端技术栈,涵盖开发必备技能
🚀 从零到实战:适合 0 基础入门到提升,循序渐进掌握核心能力
📚 丰富文档与代码示例:涵盖多种场景,可运行、可复用
🛠 工作与学习双参考:不仅适合系统化学习,更可作为日常开发中的查阅手册
🧩 模块化知识结构:按知识点分章节,便于快速定位和复习
📈 长期可用的技术积累:不止一次学习,而是能伴随工作与项目长期参考
🎯🎯🎯全教程总章节
 
🚀🚀🚀本篇主要内容
scrapy爬虫框架
介绍
知道常用的流程web框架有django、flask,那么接下来, 会来学习一个全世界范围最流行的爬虫框架scrapy
内容
- scrapy的概念作用和工作流程
 - scrapy的入门使用
 - scrapy构造并发送请求
 - scrapy模拟登陆
 - scrapy管道的使用
 - scrapy中间件的使用
 - scrapy_redis概念作用和流程
 - scrapy_redis原理分析并实现断点续爬以及分布式爬虫
 - scrapy_splash组件的使用
 - scrapy的日志信息与配置
 - scrapyd部署scrapy项目
 
scrapy官方文档
[
scrapy管道的使用
学习目标:
- 掌握 scrapy管道(pipelines.py)的使用
 
之前 在scrapy入门使用一节中学习了管道的基本使用,接下来 深入的学习scrapy管道的使用
1. pipeline中常用的方法:
- 
process_item(self,item,spider):
 - 
管道类中必须有的函数
 - 实现对item数据的处理
 - 
必须return item
 - 
open_spider(self, spider): 在爬虫开启的时候仅执行一次
 - close_spider(self, spider): 在爬虫关闭的时候仅执行一次
 
2. 管道文件的修改
继续完善wangyi爬虫,在pipelines.py代码中完善
[os 文档]
import json
from pymongo import MongoClient
class WangyiFilePipeline(object):
    def open_spider(self, spider):  # 在爬虫开启的时候仅执行一次
        if spider.name == 'itcast':
            self.f = open('json.txt', 'a', encoding='utf-8')
    def close_spider(self, spider):  # 在爬虫关闭的时候仅执行一次
        if spider.name == 'itcast':
            self.f.close()
    def process_item(self, item, spider):
        if spider.name == 'itcast':
            self.f.write(json.dumps(dict(item), ensure_ascii=False, indent=2) + ',\n')
        # 不return的情况下,另一个权重较低的pipeline将不会获得item
        return item  
class WangyiMongoPipeline(object):
    def open_spider(self, spider):  # 在爬虫开启的时候仅执行一次
        if spider.name == 'itcast':
        # 也可以使用isinstanc函数来区分爬虫类:
            con = MongoClient(host='127.0.0.1', port=27017) # 实例化mongoclient
            self.collection = con.itcast.teachers # 创建数据库名为itcast,集合名为teachers的集合操作对象
    def process_item(self, item, spider):
        if spider.name == 'itcast':
            self.collection.insert(item) 
            # 此时item对象必须是一个字典,再插入
            # 如果此时item是BaseItem则需要先转换为字典:dict(BaseItem)
        # 不return的情况下,另一个权重较低的pipeline将不会获得item
        return item
3. 开启管道
在settings.py设置开启pipeline
......
ITEM_PIPELINES = {
    'myspider.pipelines.ItcastFilePipeline': 400, # 400表示权重
    'myspider.pipelines.ItcastMongoPipeline': 500, # 权重值越小,越优先执行!
}
......
[SymPy 文档]
别忘了开启mongodb数据库 sudo service mongodb start 并在mongodb数据库中查看 mongo
思考:在settings中能够开启多个管道,为什么需要开启多个?
[Python 开发者指南]
- 不同的pipeline可以处理不同爬虫的数据,通过spider.name属性来区分
 - 不同的pipeline能够对一个或多个爬虫进行不同的数据处理的操作,比如一个进行数据清洗,一个进行数据的保存
 - 同一个管道类也可以处理不同爬虫的数据,通过spider.name属性来区分
 
4. pipeline使用注意点
- 使用之前需要在settings中开启
 - pipeline在setting中键表示位置(即pipeline在项目中的位置可以自定义),值表示距离引擎的远近,越近数据会越先经过:权重值小的优先执行
 - 有多个pipeline的时候,process_item的方法必须return item,否则后一个pipeline取到的数据为None值
 - pipeline中process_item的方法必须有,否则item没有办法接受和处理
 - process_item方法接受item和spider,其中spider表示当前传递item过来的spider
 - open_spider(spider) :能够在爬虫开启的时候执行一次
 - close_spider(spider) :能够在爬虫关闭的时候执行一次
 - 上述俩个方法经常用于爬虫和数据库的交互,在爬虫开启的时候建立和数据库的连接,在爬虫关闭的时候断开和数据库的连接
 
小结
- 
管道能够实现数据的清洗和保存,能够定义多个管道实现不同的功能,其中有个三个方法
 - 
process_item(self,item,spider):实现对item数据的处理
 - open_spider(self, spider): 在爬虫开启的时候仅执行一次
 - close_spider(self, spider): 在爬虫关闭的时候仅执行一次
 
scrapy的crawlspider爬虫
学习目标:
- 了解 crawlspider的作用
 - 应用 crawlspider爬虫创建的方法
 - 应用 crawlspider中rules的使用
 
1 crawlspider是什么
回顾之前的代码中, 有很大一部分时间在寻找下一页的url地址或者是内容的url地址上面,这个过程能更简单一些么?
思路:
- 从response中提取所有的满足规则的url地址
 - 自动的构造自己requests请求,发送给引擎
 
对应的crawlspider就可以实现上述需求,能够匹配满足条件的url地址,组装成Reuqest对象后自动发送给引擎,同时能够指定callback函数
即:crawlspider爬虫可以按照规则自动获取连接
2 创建crawlspider爬虫并观察爬虫内的默认内容
[watchdog 文档]
2.1 创建crawlspider爬虫:
scrapy genspider -t crawl job 163.com
2.2 spider中默认生成的内容如下:
class JobSpider(CrawlSpider):
    name = 'job'
    allowed_domains = ['163.com']
    start_urls = ['
    rules = (
        Rule(LinkExtractor(allow=r'Items/'), callback='parse_item', follow=True),
    )
    def parse_item(self, response):
        i = {}
        #i['domain_id'] = response.xpath('//input[@id="sid"]/@value').extract()
        #i['name'] = response.xpath('//div[@id="name"]').extract()
        #i['description'] = response.xpath('//div[@id="description"]').extract()
        return i
[Redis python客户端 方法参考]
2.3 观察跟普通的scrapy.spider的区别
在crawlspider爬虫中,没有parse函数
重点在rules中:
- rules是一个元组或者是列表,包含的是Rule对象
 - Rule表示规则,其中包含LinkExtractor,callback和follow等参数
 - LinkExtractor:连接提取器,可以通过正则或者是xpath来进行url地址的匹配
 - callback :表示经过连接提取器提取出来的url地址响应的回调函数,可以没有,没有表示响应不会进行回调函数的处理
 - follow:连接提取器提取的url地址对应的响应是否还会继续被rules中的规则进行提取,True表示会,Flase表示不会
 
3. crawlspider网易招聘爬虫
通过crawlspider爬取网易招聘的详情页的招聘信息
url:[
思路分析:
[fabric 文档]
- 定义一个规则,来进行列表页翻页,follow需要设置为True
 - 定义一个规则,实现从列表页进入详情页,并且指定回调函数
 - 在详情页提取数据
 
注意:连接提取器LinkExtractor中的allow对应的正则表达式匹配的是href属性的值
4 crawlspider使用的注意点:
- 除了用命令
scrapy genspider -t crawl <爬虫名> <allowed_domail>创建一个crawlspider的模板,页可以手动创建 - crawlspider中不能再有以parse为名的数据提取方法,该方法被crawlspider用来实现基础url提取等功能
 - Rule对象中LinkExtractor为固定参数,其他callback、follow为可选参数
 - 不指定callback且follow为True的情况下,满足rules中规则的url还会被继续提取和请求
 - 如果一个被提取的url满足多个Rule,那么会从rules中选择一个满足匹配条件的Rule执行
 
5 了解crawlspider其他知识点
[requests-oauthlib 文档]
- 
链接提取器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"]' - 
Rule常见参数
 - 
LinkExtractor: 链接提取器,可以通过正则或者是xpath来进行url地址的匹配
 - callback: 表示经过连接提取器提取出来的url地址响应的回调函数,可以没有,没有表示响应不会进行回调函数的处理
 - follow: 连接提取器提取的url地址对应的响应是否还会继续被rules中的规则进行提取,默认True表示会,Flase表示不会
 - process_links: 当链接提取器LinkExtractor获取到链接列表的时候调用该参数指定的方法,这个自定义方法可以用来过滤url,且这个方法执行后才会执行callback指定的方法
 
总结
- crawlspider的作用:crawlspider可以按照规则自动获取连接
 - crawlspider爬虫的创建:scrapy genspider -t crawl tencent hr.tencent.com
 - 
crawlspider中rules的使用:
 - 
rules是一个元组或者是列表,包含的是Rule对象
 - Rule表示规则,其中包含LinkExtractor,callback和follow等参数
 - LinkExtractor:连接提取器,可以通过正则或者是xpath来进行url地址的匹配
 - callback :表示经过连接提取器提取出来的url地址响应的回调函数,可以没有,没有表示响应不会进行回调函数的处理
 - 
follow:连接提取器提取的url地址对应的响应是否还会继续被rules中的规则进行提取,True表示会,Flase表示不会
 - 
完成网易招聘爬虫crawlspider版本
 
🚀✨ (未完待续)项目系列下一章
📚下一篇 将进入更精彩的环节! 🔔 记得收藏 & 关注,第一时间获取更新! 🍅 一起见证整个系列逐步成型的全过程。
- 点赞
 - 收藏
 - 关注作者
 
            
           
评论(0)