动态可配置化 Python 爬虫

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

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

0x00 需求



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

0x01 基础配置

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

  1. 项目名,别名不说了,域名指的是 allowed_domains,也就是允许爬虫在哪些域名下爬取
  1. 爬虫开始的链接指的是 start_urls,指的是爬虫从哪个链接开始爬取,比如,www.douban.com/group/haixi… , 从豆瓣害羞组的第一页爬取。
  1. 保存数据的方式,目前支持 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 命令如下

1
复制代码pip install scrapy

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

1
复制代码python scripts.py

或者直接用 scrapy

1
复制代码scrapy crawl <项目名>

0x05 Todo

  1. 支持自动登录
  1. 支持动态爬取
  1. api 接口爬虫
  1. 能适配更多爬取场景
  1. 支持 css 解析网页
  1. 其他

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%