Scrapy爬虫框架介绍
- 文档
- 英文文档
- 中文文档
- 什么是scrapy
基于
twisted
搭建的异步爬虫框架. scrapy爬虫框架根据组件化设计理念和丰富的中间件, 使其成为了一个兼具高性能和高扩展的框架 - scrapy提供的主要功能
- 具有优先级功能的调度器
- 去重功能
- 失败后的重试机制
- 并发限制
- ip使用次数限制
- ....
- scrapy的使用场景
- 不适合scrapy项目的场景
- 业务非常简单, 对性能要求也没有那么高, 那么我们写多进程, 多线程, 异步脚本即可.
- 业务非常复杂, 请求之间有顺序和失效时间的限制.
- 如果你不遵守框架的主要设计理念, 那就不要使用框架
- 适合使用scrapy项目
- 数据量大, 对性能有一定要求, 又需要用到去重功能和优先级功能的调度器
- 不适合scrapy项目的场景
- scrapy组件
Scrapy教程
安装
代码语言:javascript复制pip install scrapy
创建项目
代码语言:javascript复制scrapy startproject jd_crawler_scrapy
目录结构
- spiders(目录)
存放
SPIDERS
项目文件, 一个scrapy项目下可以有多个爬虫实例 - items 解析后的结构化结果.
- middlewares 下载器中间件和爬虫中间件的地方
- piplines 处理items的组件, 一般都在pipelines中完成items插入数据表的操作
- settings 统一化的全局爬虫配置文件
- scrapy.cfg 项目配置文件
scrapy爬虫demo
代码语言:javascript复制import scrapy
class JdSearch(scrapy.Spider):
name = "jd_search"
def start_requests(self):
for keyword in ["鼠标", "键盘", "显卡", "耳机"]:
for page_num in range(1, 11):
url = f"https://search.jd.com/Search?keyword={keyword}&page={page_num}"
# 选用FormRequest是因为它既可以发送GET请求, 又可以发送POST请求
yield scrapy.FormRequest(
url=url,
method='GET',
# formdata=data, # 如果是post请求, 携带数据使用formdata参数
callback=self.parse_search # 指定回调函数处理response对象
)
def parse_search(self, response):
print(response)
启动爬虫
代码语言:javascript复制scrapy crawl spider_name