Scrapy介绍
Scrapy 是一个强大的 Python 爬虫框架
官方文档:https://docs.scrapy.org/en/latest/intro/tutorial.html
教程参考:https://www.runoob.com/w3cnote/scrapy-detail.html
Scrapy架构概览
Scrapy 中的数据流由执行引擎控制,如下所示:
-
引擎从Spider获取初始抓取请求 。
-
引擎在调度程序中调度请求 ,并请求抓取下一个请求。
-
调度程序将下一个请求返回给引擎。
-
引擎通过 下载中间件(参见 )将请求发送给 下载器。
process_request()
-
一旦页面下载完成, 下载器就会生成一个响应(包含该页面)并通过下载器中间件将其发送到引擎 (参见
process_response()
)。 -
引擎从下载器接收响应 并将其发送到 Spider进行处理,传递过程经过Spider 中间件(参见 )。
process_spider_input()
-
Spider处理响应并 通过 Spider 中间件(参见 )将抓取的项目和新的请求(待跟进)返回给引擎。
process_spider_output()
-
引擎将处理过的项目发送到 项目管道,然后将处理过的请求发送到调度程序并询问可能的下一个要抓取的请求。
-
该过程重复(从步骤 3 开始),直到不再有来自 调度程序的请求。
Scrapy安装
安装 Scrapy:
命令:pip install scrapy
Scrapy项目
1. 创建一个新的 Scrapy 项目:
scrapy startproject myproject
cd myproject
2. 项目结构
myproject/ scrapy.cfg # 开发配置文件 myproject/ # 项目的python模块 __init__.py items.py # 项目数据模型定义文件 middlewares.py # 项目中间件文件 pipelines.py # 项目管道文件 settings.py # 项目设置文件 spiders/ # 爬虫目录,里面放的是编写的爬虫文件 __init__.py
3. 生成一个新的爬虫:
在myproject/spiders目录中,执行命令
scrapy genspider example example.com
example 爬虫名字, example.com 对应网站
4. 编辑爬虫文件(例如 `myproject/spiders/example.py`):
import scrapy class ExampleSpider(scrapy.Spider): name = 'example' allowed_domains = ['example.com'] start_urls = ['https://example.com'] def parse(self, response): # 提取数据 xpath提取数据
img_list = response.xpath("//div[@class='tea_con']//ul/li/img/@src")
name_list = response.xpath("//div[@class='tea_con']//ul/li/div[@class='li_txt']/h3/text()")
# 直接返回最后数据
# return items
5. 运行爬虫:
在myproject/spiders目录中,执行命令
scrapy crawl example
6. 保存数据:
要将爬取的数据保存到文件,可以在运行爬虫时指定输出格式:
scrapy crawl example -O output.json
7. 设置和中间件:
- 在 `settings.py` 文件中配置爬虫设置,如 User-Agent、下载延迟等。
- 使用中间件处理请求和响应,例如处理 cookies 或代理。
8. 项目管道:
在 `pipelines.py` 中定义数据处理管道,用于清理、验证或存储数据。
9. 使用 Item 和 ItemLoader:
- 在 `items.py` 中定义结构化数据项。
- 使用 ItemLoader 来填充 Item 对象,提供了一种灵活的方式来提取和处理字段。
10. 调试和日志:
使用 Scrapy shell 进行交互式调试:
scrapy shell "http://example.com"
11. 遵守 robots.txt:
默认情况下,Scrapy 遵守 robots.txt 规则。可以在设置中修改这个行为。
在 `settings.py` 文件中配置有配置,如果不遵守则改为False