简介
Scrapy 是目前使用最广泛的爬虫框架之一,只需要编写非常少的代码就能实现需要的爬虫功能。
Scrapy 基本使用方法
安装
Scrapy 安装非常方便,直接使用 pip 安装
1 | pip install scrapy |
Scrapy 编写基础爬虫程序
首先使用以下命令自动创建一个爬虫模板:
1 | scrapy startproject project_name |
接下来在 ‘spider’ 文件夹下建立一个爬虫文件,以下是一段模板程序:
1 | import scrapy |
该程序包含三大基本组件,name 指定爬虫的名字,必须唯一。start_requests 函数向目标网址发送请求,其中 Request() 类必须指定 url 和 callback 函数,callback 函数的作用为解析 HTML 文件。parse 函数实现 HTML 解析功能,实例中实现的功能为把爬取的 HTML 文件直接存储在本地。接下来的内容将会介绍其他内容提取方法。
使用代理
很多网站比如 google 会部署反爬虫程序来减小服务器压力,如果我们直接使用本地 ip 运行大量爬虫,很有可能会被封掉。在这种情况下我们可以使用代理,这里介绍一个代理网站 https://www.scraperapi.com/,免费版本每个月有 5000 次爬取机会。在程序中定义以下函数:
1 | def get_url(url): |
其中 API_KEY 在注册账户中可以找到。
运行程序
Scrapy 一般使用命令行来运行
1 | scrapy crawl demo -o save_file.jl |
其中 save_file.jl 可以使用 jsonline 格式保存爬取的数据。
如果想要使用 pycharm 来调试爬虫程序,可以在 setting.py 同级目录新建一个文件,并编写以下代码:
1 | from scrapy import cmdline |
以上代码有一个问题是执行完爬虫程序就直接退出了,无法串行执行两个以上爬虫程序或者对爬取数据进行后续处理,为了解决这个问题,可以使用以下代码:
1 | import os |
这行代码有一个问题是没有办法停在爬虫程序的断点处,因此没法调试爬虫。所以我现在的策略是使用 cmdline 来调试单个爬虫程序,在单个爬虫程序调试完成后,再使用 os.system 来实现爬虫数据后处理。
Xpath 使用方法
Scrapy 使用 selector 提取 HTML 文件内容,其中 selector 有很多选择,比如 css 和 xpath,这里我们只介绍 xpath。
常用语法
- //: 提取子目录所有满足条件内容
- /: 提取直接子目录所有满足条件内容
- []: 设置提取条件
- @: 指定属性
- text(): 提取文字
一下为一个实例:
1 | response.xpath('//div//a[@class="gsc_a_at"]//text()').extract() |
这段程序提取了所有 div 标签下的所有 a 标签,其中 a 标签需要带有属性 class=”gsc_a_at”,并提取满足条件标签的所有文字。extract() 把 selector 转化成 string,如果有多个满足条件的内容,将形成一个列表。
爬取动态网页
实际生活中有很多网页需要通过 js 来渲染,直接使用 scrapy 无法直接爬取,因此需要借助于 splash 来实现。具体使用方法可以参考这个教程。
Reference
[1] Scrapy documentation
[2] scrapy-splash 教程
[3] 学爬虫利器XPath,看这一篇就够了
[4] Concise XPath
[5] scraperapi
[6] Scrapy框架的使用之Item Pipeline的用法
[7] Scrapy中Item Pipeline的用法