🏆🏆🏆教程全知识点简介: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 👉直接-->: gitee.com/yinuo112/Ba… 🍅🍅
✨ 本教程项目亮点
🧠 知识体系完整:覆盖从基础原理、核心方法到高阶应用的全流程内容
💻 全技术链覆盖:完整前后端技术栈,涵盖开发必备技能
🚀 从零到实战:适合 0 基础入门到提升,循序渐进掌握核心能力
📚 丰富文档与代码示例:涵盖多种场景,可运行、可复用
🛠 工作与学习双参考:不仅适合系统化学习,更可作为日常开发中的查阅手册
🧩 模块化知识结构:按知识点分章节,便于快速定位和复习
📈 长期可用的技术积累:不止一次学习,而是能伴随工作与项目长期参考
🎯🎯🎯全教程总章节

🚀🚀🚀本篇主要内容
scrapy爬虫框架
介绍
知道常用的流程web框架有django、flask,那么接下来, 会来学习一个全世界范围最流行的爬虫框架scrapy
内容
-
scrapy的概念作用和工作流程
-
scrapy的入门使用
-
scrapy构造并发送请求
-
scrapy模拟登陆
-
scrapy管道的使用
-
scrapy中间件的使用
-
scrapy_redis概念作用和流程
-
scrapy_redis原理分析并实现断点续爬以及分布式爬虫
-
scrapy_splash组件的使用
-
scrapy的日志信息与配置
-
scrapyd部署scrapy项目
scrapy官方文档
scrapy-chs.readthedocs.io/zh_CN/0.24/…
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代码中完善
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, # 权重值越小,越优先执行!
}
......
别忘了开启mongodb数据库 sudo service mongodb start 并在mongodb数据库中查看 mongo
思考:在settings中能够开启多个管道,为什么需要开启多个?
-
不同的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 文档](https://python-watchdog