动态可配置化 Python 爬虫教程

发布于 2024-09-12 14:10:33 字数 2957 浏览 14 评论 0

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

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

0x00 需求


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

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 规则列表

规则列表分成两部分,链接正则 和 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 解析网页
  6. 其他

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

小糖芽

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

linfzu01

文章 0 评论 0

可遇━不可求

文章 0 评论 0

枕梦

文章 0 评论 0

qq_3LFa8Q

文章 0 评论 0

JP

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文