Python爬虫入门之 Scrapy框架的使用
Scrapy是适用于Python的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。 [1]
支持自定义,方便,好用。异步的,,速度嗖嗖嗖的!!!
异步处理框架,可配置和可扩展程度非常高,Python中使用最广泛的爬虫框架
Scrapy中文文档
常用命令:
方法 | 描述 |
---|---|
scrapy startproject scrapydemo | 创建一个名为 scrapydemo 的scrapy项目 |
scrapy genspider scrapydemo bilibili.com | 创建一个名为scrapydemo的spider,访问域名为bilibili.com |
scrapy crawl -o xxx.json | 数据存储到 xxx.json |
cmdline.execute(“scrapy crawl scrapyspider”.split()) | 启动scrapy的scrapyspider文件 |
0. 准备工作
查看scrapy命令
scrapy -h
安装
pip install scrapy
1. 创建一个scrapy项目
创建scrapy项目
scrapy startproject scrapydemo
切换到scrapydemo项目
cd scrapydemo
创建一个新的spider
scrapy genspider scrapydemo bilibili.com
流程图:
画图
- Spider的将需要发送请求的
request
发送给Engine(引擎 - Engine将
request
发送给Scheduler(调度器 - Scheduler(调度器,可理解为url队列),生成request请求交给Engine
- Engine拿到
request
,通过DownloaderMiddleware(可选,主要有UA
,Cookie
,代理IP
)进行层层过滤发送给Downloader - Downloader向互联网发送请求,获取到
response
后,又经过SpiderMiddleware(爬虫中间件)发送给Engine - Engine获取到
response
数据之后,返回给Spider, - Spider的
parse()
方法对获取到的response
数据进行处理,解析出item
和request
,然后发送给Engine - Engine获取到
item
和request
,将item
发送给ItemPipeline(管道)进行数据持久化,将request
发送给Scheduler(调度 - 以上步骤会一直循环,循环到无
request(url)
请求,程序才停止。
注意!即使某个request中报错了,程序也会继续执行到没有request请求才停止。
部分文件说明:
文件 | 说明 |
---|---|
items.py | 定义采集的数据字段,用于结构化数据 |
pipelines.py | 数据持久化 |
settings.py | 配置文件 |
spiders | 编写爬虫规则 |
middleware.py | 中间件,如为请求添加cookie、ua等 |
2. 案例实战
链家
查看君子协议:https://www.bilibili.com/robots.txt
3. 数据持久化
存储为csv:
代码语言:javascript复制cmdline.execute('scrapy crawl spider -o lianjia.csv'.split())
存储为json:
代码语言:javascript复制cmdline.execute('scrapy crawl spider -o lianjia.json'.split())
存储到数据库:
pipeline.py