如果文章对你有帮助,欢迎关注、点赞、收藏一键三连支持以下哦!
想要一起交流学习的小伙伴可以加zkaq222(备注CSDN,不备注通不过哦)进入学习,共同学习进步
目录
0x01 安装和简介
0x02 文件作用
0x04 保存数据
0x01 安装和简介
Scrapy是适用于Python的一个快速、高层次的屏幕抓取和web抓取框架。
原理图:
简单来说,先去spiders拿url,再转到引擎,再给其他的模块传来传去。
我自己是linux安装,windows安装很麻烦
sudo apt-get install libxml2-dev libxslt-dev python-dev
pip install lxml
sudo apt-get install python-dev python-pip libxml2-dev zlib1g-dev libffi-dev libssl-dev
pip install Scrapy
apt-get install python3-scrapy
这几条都可以试试,毕竟安装这个东西很玄学。
输入scrapy后出现这个就是下载好了:
└─# scrapy
Scrapy 2.7.1 - no active project
Usage:
scrapy <command> [options] [args]
Available commands:
bench Run quick benchmark test
commands
fetch Fetch a URL using the Scrapy downloader
genspider Generate new spider using pre-defined templates
runspider Run a self-contained spider (without creating a project)
settings Get settings values
shell Interactive scraping console
startproject Create new project
version Print Scrapy version
view Open URL in browser, as seen by Scrapy
[ more ] More commands available when run from project directory
Use "scrapy <command> -h" to see more info about a command
0x02 文件作用
创建项目:
scrapy startproject <项目名字>
框架结构:
tree <项目名字>
myspider
├── __init__.py
├── items.py
├── middlewares.py
├── pipelines.py -->管道 保存数据
├── settings.py --> 设置文件 ua 启动管道
└── spiders -->自定义
└── __init__.py
先来看看scrapy.cfg
settings是详细设置
deploy部署 应用于项目部署
items.py 模版类,定义数据存储模型
middlewsres 中间件模块,一般不用编写。
pipelines 数据清洗或保存
0x03 创建爬虫
在项目目录下执行:
cd example
scrapy genspider example example.com
新的框架结构
首先继承了一个类,name是爬虫的名字,allowed_domain是允许的域名,意思是只爬取这个域名的信息,start_urs起始url是bbs.zkaq.cn。
parse方法中response是请求bbs对应的响应。
运行爬虫:
scrapy crawl zkaq --nolog
—nolog:去除日志,只得到结果。
我之前有一篇爬取所有帖子名字的文章,这里直接把当时的xpath放到parse方法里。
这里用的是response的xpath方法,返回一个列表,操作和列表一样,但是有两个别的方法:
extarct(): 返回一个带有字符串的列表
extarct_first():返回列表的第一个字符串,没有时返回none。
用上面的指令运行:
一点vim知识(我不太会linux):
i 进入编辑模式
ESC 退出模式
:wq 保存并退出
0x04 保存数据
利用管道(pipelines)对数据进行处理和保存。
- 定义一个管道类
- 重写process_item方法
- process_item处理完后返回给引擎 实际上是,spiders给引擎,引擎给pipeline
- 4.在settings.py中,把管道注释删除,这一步叫做启动管道。
管道执行顺序:
ITEM_PIPELINES = {
'myspider.pipelines.MySpiderPipeline': 299,
'myspider.pipelines.MySpiderPipeline': 300,
}
则299先执行。
在zkaq.py中,使用yield把node_list返回给引擎
最后运行爬虫
还没看够?下篇继续
https://docs.qq.com/doc/DYlBlQ2xhaFBmamtq