动态可配置化 Python 爬虫教程
爬虫大家都很熟悉,像 scrapy 这种 Python 爬虫框架也很成熟,不过每写一个爬虫都得重新复制一份代码,这部分如果做成可配置的话,能相应减少一些工作量,对新手也会友好些,所以我花了点时间,开发了一个动态可配置的爬虫网站 http://www.anycrawl.info ,基于 scrapy ,提供一些配置项,5 分钟就可生成一个通用爬虫,并可直接下载代码使用。
我举 http://www.anycrawl.info/project/15/ 豆瓣小组爬虫的例子来介绍下网站的使用方法。
0x00 需求
我们希望能够爬取害羞组下的所有话题的标题,作者,以及对应的内容和图片
0x01 基础配置
基础配置主要是 scrapy 的 settings.py 的一些选项
- 项目名,别名不说了,域名指的是 allowed_domains,也就是允许爬虫在哪些域名下爬取
- 爬虫开始的链接指的是 start_urls,指的是爬虫从哪个链接开始爬取,比如, https://www.douban.com/group/haixiuzu/discussion , 从豆瓣害羞组的第一页爬取。
- 保存数据的方式,目前支持 json, csv, image, mongodb, elasticsearch。(如果选择 image 的方式,则需要在下面配置规则的时候,选择保存图片链接 到 image_urls 这个字段,scrapy 会自动下载图片。mongodb, elasticsearch 则需要自己在 settings.py 配置你的 host 和 port)
我们配置如下
0x02 规则列表
规则列表分成两部分,链接正则 和 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
- 支持自动登录
- 支持动态爬取
- api 接口爬虫
- 能适配更多爬取场景
- 支持 css 解析网页
- 其他
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: 谈谈 django 应用实践
下一篇: VSCode C++ 环境配置
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论