V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
tikazyq
V2EX  ›  Python

[爬虫手记] 我是如何在 3 分钟内开发完一个爬虫的

  •  
  •   tikazyq ·
    tikazyq · 2019-05-27 12:55:30 +08:00 · 2718 次点击
    这是一个创建于 2011 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前言

    开发爬虫是一件有趣的事情。写一个程序,对感兴趣的目标网站发起 HTTP 请求,获取 HTML,解析 HTML,提取数据,将数据保存到数据库或者存为 CSV、JSON 等格式,再用自己熟悉的语言例如 Python 对这些数据进行分析生成酷炫的图表。这个过程是不是很兴奋?

    然而,开发爬虫并不是一件简单的事情。通常开发一个简单爬虫往往需要编写好几个模块:下载器、解析器、提取规则、保存模块。实现这个简单爬虫用 Python 实现至少需要编写 10-20 行代码,而且如果考虑并发和调度的话,通常要编写 50 行代码以上。更麻烦的是,如果要管理多个爬虫实现爬虫的工程化,需要对各个网站的爬虫代码提取共用模块和参数,这个过程需要相当的工程经验和时间积累。其实,一般各大网站的结构大同小异,仅需要更改提取规则即可。很多爬虫工程师要在大型项目中编写成百上千的提取规则,对于没有任何管理工具的人来说,这基本上是个噩梦。

    可配置爬虫

    幸运的是,Crawlab版本 v0.2.1中新增功能可配置爬虫可以让工程师从这些重复性工作中解放开来。Crawlab 的可配置爬虫只需要爬虫工程师配置一些必要的 CSS/XPath 提取规则,就可以完成一个常规的爬虫开发。根据作者实验,对于 CSS 选择器或 XPath 稍微熟悉点的工程师,用可配置爬虫开发完一个包含五脏俱全的常规爬虫只需要 1-3 分钟。

    Crawlab 的可配置爬虫是基于 Scrapy 的,因此天生是支持并发的。而且,可配置爬虫完全支持 Crawlab自定义爬虫的一般功能的,因此也支持任务调度、任务监控、日志监控、数据分析。

    安装运行 Crawlab

    Crawlab是一个专注于爬虫的集成了爬虫管理、任务调度、任务监控、数据分析等模块的分布式爬虫管理平台,非常适合对爬虫管理、爬虫工程化有要求的开发者及企业。

    关于 Crawlab 的详细介绍请参考之前的文章:

    以下是 Crawlab 的安装和运行步骤,时间大概在 10-20 分钟。

    安装步骤

    运行步骤

    如何开发并运行可配置爬虫

    下面总算到了爬虫开发时间。这里将以网易 24 小时排行新闻为例,开发一个相应的可配置爬虫,整个流程应该不超过 3 分钟。

    添加爬虫

    Crawlab 跑起来之后,在浏览器中打开网址http://localhost:8080,导航到爬虫。在点击添加爬虫按钮。

    爬虫列表

    点击可配置爬虫

    爬虫列表-添加爬虫

    输入完基本信息,点击添加

    爬虫列表-爬虫信息

    配置爬虫

    添加完成后,可以看到刚刚添加的可配置爬虫出现了在最下方,点击查看进入到爬虫详情

    点击配置标签进入到配置页面。接下来,我们需要对爬虫规则进行配置。

    这里已经有一些配置好的初始输入项。我们简单介绍一下各自的含义。

    抓取类别

    这也是爬虫抓取采用的策略,也就是爬虫遍历网页是如何进行的。作为第一个版本,我们有仅列表仅详情页列表+详情页

    • 仅列表页。这也是最简单的形式,爬虫遍历列表上的列表项,将数据抓取下来。
    • 仅详情页。爬虫只抓取详情页。
    • 列表+详情页。爬虫先遍历列表页,将列表项中的详情页地址提取出来并跟进抓取详情页。

    这里我们选择列表+详情页

    列表项选择器 & 分页选择器

    列表项的匹和分页按钮的匹配查询,由 CSS 或 XPath 来进行匹配。

    开始 URL

    爬虫最开始遍历的网址。

    遵守 Robots 协议

    这个默认是开启的。如果开启,爬虫将先抓取网站的 robots.txt 并判断页面是否可抓;否则,不会对此进行验证。用户可以选择将其关闭。请注意,任何无视 Robots 协议的行为都有法律风险。

    列表页字段 & 详情页字段

    这些都是再列表页或详情页中需要提取的字段。字段由 CSS 选择器或者 XPath 来匹配提取。可以选择文本或者属性。

    在检查完目标网页的元素 CSS 选择器之后,我们输入列表项选择器、开始 URL、列表页 /详情页等信息。注意勾选 url 为详情页 URL。

    点击保存、预览,查看预览内容。

    OK,现在配置大功告成,终于可开始跑爬虫了!

    运行爬虫

    你唯一需要做的,就是点击运行按钮并确认。点击概览标签,你可以看到任务已经开始运行了。

    点击创建时间链接导航到任务详情,点击结果标签,你就可以看到抓取到的结果已经保存下来了。

    怎么样,这个过程是不是超级简单?如果熟练的话,整个过程可以在 60 秒内完成!就跟玩魔方一样,越玩越熟练!

    结语

    本文利用 Crawlab 的可配置爬虫功能实现了 3 分钟内对网易新闻 24 小时新闻排行榜的抓取。同样的过程可以实现在其他类似的网站上面。虽然这是一个经典的“列表+详情页”的抓取模式,比较简单,后续我们还会开发更多的更复杂的抓取模式,实现更多的抓取需求。Crawlab 的可配置爬虫降低了爬虫的开发时间,增加了爬虫开发效率,完善了工程化水平,将爬虫工程师从日常的繁琐配置工作中解放出来。配置工作可以交给初级爬虫工程师或者外包人员来做,而高级爬虫工程师会把精力放在更复杂的爬虫工作上来,例如反爬、动态内容、分布式爬虫等等。

    Github: tikazyq/crawlab

    如果感觉 Crawlab 还不错,对你的日常工作或企业有帮助的话,请加作者微信拉入开发交流群,大家一起交流关于 Crawlab 的使用和开发。

    6 条回复    2019-05-27 13:54:48 +08:00
    gchxp
        1
    gchxp  
       2019-05-27 13:05:48 +08:00   ❤️ 2
    现在看到这种 X 行 /X 分钟开发的第一件事情就是拉到文章底部看看有没有微信二维码
    tikazyq
        2
    tikazyq  
    OP
       2019-05-27 13:07:44 +08:00   ❤️ 1
    @gchxp 推广文,要不反手点个赞?
    lunatic5
        3
    lunatic5  
       2019-05-27 13:46:35 +08:00
    跟同样在站内推广的蓝天采集器是一样的?
    tt67wq
        4
    tt67wq  
       2019-05-27 13:51:18 +08:00
    直接拉到最后一页,再见
    tikazyq
        5
    tikazyq  
    OP
       2019-05-27 13:54:16 +08:00
    @lunatic5 这个是啥呢
    tikazyq
        6
    tikazyq  
    OP
       2019-05-27 13:54:48 +08:00
    @tt67wq 不稍微看几句么。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5673 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 01:35 · PVG 09:35 · LAX 17:35 · JFK 20:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.