90

动态可配置化 Python 爬虫

 6 years ago
source link: https://zhuanlan.zhihu.com/p/31659456?
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

动态可配置化 Python 爬虫

【代码已开源: facert/scrapy_helper

爬虫大家都很熟悉,像 scrapy 这种 Python 爬虫框架也很成熟,不过每写一个爬虫都得重新复制一份代码,这部分如果做成可配置的话,能相应减少一些工作量,对新手也会友好些,所以我花了点时间,开发了一个动态可配置的爬虫网站 http://www.anycrawl.info ,基于 scrapy ,提供一些配置项,5分钟就可生成一个通用爬虫,并可直接下载代码使用。

我举 http://www.anycrawl.info/project/15/ 豆瓣小组爬虫的例子来介绍下网站的使用方法。

0x00 需求

v2-d0c49d41625b7b96f9211707d6da9366_720w.webp

v2-d469b4adb4c139e2e102028215ee30d3_720w.webp

我们希望能够爬取害羞组下的所有话题的标题,作者,以及对应的内容和图片

0x01 基础配置

基础配置主要是 scrapy 的 settings.py 的一些选项

1. 项目名,别名不说了,域名指的是 allowed_domains,也就是允许爬虫在哪些域名下爬取

2. 爬虫开始的链接指的是 start_urls,指的是爬虫从哪个链接开始爬取,比如,https://www.douban.com/group/haixiuzu/discussion , 从豆瓣害羞组的第一页爬取。

3. 保存数据的方式,目前支持 json, csv, image, mongodb, elasticsearch。(如果选择 image 的方式,则需要在下面配置规则的时候,选择保存图片链接 到 image_urls 这个字段,scrapy 会自动下载图片。mongodb, elasticsearch 则需要自己在 settings.py 配置你的 host 和 port)

我们配置如下

0x02 规则列表

1. 规则列表分成两部分,链接正则 和 xpath 规则,必须先配置链接正则,链接正则对应的概念是 scrapy 的 Rule 的概念,意思是根据你给定的链接正则去匹配,如果匹配的到,则执行回调函数 callback, callback 可以为空,如果为空,则放入队列中。

如上面 /group/\w+/discussion\?start=[0-9]{0,4}$ 这个对应的是小组分页的链接正则,遇到这些链接,只要丢到队列中,由 scrapy 下次处理,/group/topic/\d+/ 这个对应的是话题的详情链接,遇到这些,则执行 parse_topic 函数,那么这个函数具体执行什么内容,这就看下面配置的 xpath 规则,xpath 教程 ,如我们需要 title, author, description, create_time, image_urls 这几个字段,直接配置即可,只要能通过 xpath 语法找到。

配置完成后,会对应生成如下的源码:

0x03 爬取状态

点击提交后,就跳转到下载页面

这里面有个数据指标的功能,记录你爬取的数目,目前看起来有点鸡肋,如果不需要记录,将 settings 里面的 COUNT_DATA 改为 False 就行。

0x04 运行爬虫

运行爬虫必须有 python 和 scrapy 环境,安装 python 和 pip 这里不介绍了,安装 scrapy 命令如下

pip install scrapy

然后下载刚才的项目代码,解压后,进入 output/xxxxxx 目录,执行

python scripts.py

或者直接用 scrapy

scrapy crawl <项目名>

0x05 Todo

1. 支持自动登录

2. 支持动态爬取

3. api 接口爬虫

4. 能适配更多爬取场景

5. 支持 css 解析网页

0x06 Other

1.这个项目只提供一个简单的通用框架,其他更灵活的功能,比如绕反爬,验证码解析,可以直接下载代码后自行定制。

2. 目前项目肯定有很多问题,如果有使用上的问题和反馈,可直接私信联系。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK