scrapy分页抓取网页(scrapy架构流程•Scrapy,Python开发的一个快速、高层次的屏幕和web抓取框架)
优采云 发布时间: 2022-02-25 06:14scrapy分页抓取网页(scrapy架构流程•Scrapy,Python开发的一个快速、高层次的屏幕和web抓取框架)
scrapy架构流程
• Scrapy,一个用 Python 开发的快速、高级的屏幕抓取和网页抓取框架,使用
用于抓取网站并从页面中提取结构化数据。
• Scrapy 的吸引力在于它是一个任何人都可以根据自己的需要轻松修改的框架。
还提供了各类爬虫的基类,如BaseSpider、站点地图爬虫等。最新版本
Ben 还提供了对 web2.0 爬虫的支持。
• Scrap,意思是片段,这个Python爬虫框架叫做Scrapy。
优势:
用户只需要自定义开发几个模块,就可以轻松实现爬虫,爬取网页内容和图片非常方便;Scrapy 使用 Twisted 异步网络框架来处理网络通信,加快网页下载速度,并且不需要自己实现异步框架和多线程等,并且收录各种
灵活满足各种需求的中间件接口
Scrapy主要包括以下组件:
• 引擎(Scrapy):
用于处理整个系统的数据流,触发事务(框架核心)
• 调度程序:
它用于接受引擎发送的请求,将其推入队列,并在引擎再次请求时返回。
后退。它可以被认为是一个 URL 的优先级队列(网站 URL 或要爬取的链接),它决定了下一个要爬取的
什么是网址,同时删除重复的网址
• 下载器:
用于下载网页内容并将网页内容返回给蜘蛛(Scrapy下载器内置
在 twisted 上,一种高效的异步模型)
• 蜘蛛:
爬虫主要用于从特定网页中提取它需要的信息,即所谓的实体
(物品)。用户也可以从中提取链接,让 Scrapy 继续爬取下一页
• 项目管道(Pipeline):负责处理爬虫从网页中提取的实体,主要功能是持久化实体,验证
身体的有效性,清除不需要的信息。当页面被爬虫解析后,会被送到项目流水线,经过几个具体的
按顺序处理数据。
• 下载器中间件:
位于 Scrapy 引擎和下载器之间的框架,
它主要处理 Scrapy 引擎和下载器之间的请求和响应。
• Spider Middlewares:Scrapy 引擎和爬虫之间的框架,主要工作是
管理蜘蛛的响应输入和请求输出
• 调度程序中间件:
Scrapy引擎和调度之间的中间件,来自
Scrapy 引擎发送的要调度的请求和响应。采用
# 爬取的步骤
- 确定url地址;
- 获取页面信息;(urllib, requests);
- 解析页面提取需要的数据; (正则表达式, bs4, xpath)
- 保存到本地(csv, json, pymysql, redis);
- 清洗数据(删除不必要的内容 -----正则表达式);
- 分析数据(词云wordcloud + jieba)
有没有用到多线程? -----
获取页面信息每个爬虫都会使用, 重复去写----
设置头部信息 ---- user-agent, proxy....
# 流程分析:
- 确定url地址:http://www.imooc.com/course/list;(spider)
- 获取页面信息;(urllib, requests); ---(scrapy中我们不要处理)---(Downloader)
- 解析页面提取需要的数据; (正则表达式, bs4, xpath)---: (spider)
课程链接, 课程的图片url, 课程的名称, 学习人数, 课程描述
- 保存到本地(csv, json, pymysql, redis); ----(pipeline)
# 环境
- Scrapy 1.6.0
# 实现步骤:
1. 工程创建
scrapy startproject mySpider
cd mySpider
tree
├── mySpider
│ ├── __init__.py
│ ├── items.py # 提取的数据信息
│ ├── middlewares.py # 中间键
│ ├── pipelines.py # 管道, 如何存储数据
│ ├── __pycache__
│ ├── settings.py # 设置信息
│ └── spiders # 爬虫(解析页面的信息)
│ ├── __init__.py
│ └── __pycache__
└── scrapy.cfg
2. 创建一个爬虫
scrapy genspider mooc "www.imooc.com"
cd mySpider/spiders/
vim mooc.py
# start_url
3. 定义爬取的items内容
class CourseItem(scrapy.Item):
# 课程标题
title = scrapy.Field()
# 课程的url地址
url = scrapy.Field()
# 课程图片url地址
image_url = scrapy.Field()
# 课程的描述
introduction = scrapy.Field()
# 学习人数
student = scrapy.Field()
# 4. 编写spider代码, 解析
新项目
明确的目标
1.在 items.py 中定义变量
用于保存爬取的数据,类似于python中的字典,提供一些额外的保护
import scrapy
class CourseItem(scrapy.Item):
# Item对象是一个简单容器, 保存爬取到的数据, 类似于字典的操作;
# 实例化对象: course = CourseItem()
# course['title'] = "语文"
# course['title']
# course.keys()
# course.values()
# course.items()
# define the fields for your item here like:
# name = scrapy.Field()
# 课程链接, 课程的图片url, 课程的名称, 学习人数, 课程描述
# 课程标题
title = scrapy.Field()
# 课程的url地址
url = scrapy.Field()
# 课程图片url地址
image_url = scrapy.Field()
# 课程的描述
introduction = scrapy.Field()
# 学习人数
student = scrapy.Field()
做一个爬虫
2.定义解析方法
name = "" :这个爬虫的标识名必须是唯一的,不同的爬虫必须定义不同的名字。
allow_domains = [] 是搜索的域名范围,即爬虫的禁区,规定爬虫只抓取该域名下的网页,不存在的URL会被忽略。
start_urls = () : 元组/抓取的 URL 列表。爬虫从这里开始抓取数据,所以数据的第一次下载将从这些 url 开始。将从这些起始 URL 继承生成其他子 URL。
parse(self, response) : 解析方法,每个初始 URL 下载后都会调用。调用时,每个 URL 返回的 Response 对象作为唯一参数传递。主要功能如下:
负责解析返回的网页数据(response.body),提取结构化数据(生成item)