资讯专栏INFORMATION COLUMN

利用 scrapy 集成社区爬虫功能

Yangyang / 1267人阅读

摘要:为了方便用户展示自己的社区资料,雨点儿网中增加了一个社区爬虫功能。方案使用运行爬虫鉴于项目当前的架构,准备使用来执行异步爬虫。可以同时执行多个爬虫,最大进程数可配,防止系统过载。尾欢迎使用我们的爬虫功能来收集社交资料。

社区活跃度或者贡献越来越受到重视,往往会作为获得工作或者承接项目的加分项。为了方便用户展示自己的社区资料,雨点儿网中增加了一个社区爬虫功能。

当前只爬取了用户主页上一些简单的信息,如果有需求请提到我们的项目议题中

效果如下:

功能实现

代码放在了github上,源码

如图所示,在之前的架构上(http://segmentfault.com/a/1190000003808733),我增加了橙色虚线框内的部分,包括:

scrapyd:一个用于运行爬虫任务的webservice

spiders:使用scrapy框架实现的爬虫

mongo:存放爬取的数据

使用scrapy框架

scrapy是一个python爬虫框架,想要快速实现爬虫推荐使用这个。

可以参考如下资料自行学习:

官方文档和官方例子

一个简单明了的入门博客,注意:博客中scrapy的安装步骤可以简化,直接使用 pip install scrapy,安装过程中可能会缺少几个lib,ubuntu使用 apt-get install libffi-dev libxml2-dev libxslt1-dev -y

使用mongodb存储数据

mongo非常适合存储爬虫数据,支持异构数据。这意味着你可以随时改变爬虫策略抓取不同的数据,而不用担心会和以前的数据冲突(使用sql就需要蛋疼的修改表结构了)。

通过scrapy的pipline来集成mongo,非常方便。

安装mongo

apt-get install mongodb
pip install pymongo
使用xpath提取页面数据

在编写爬虫的过程中需要使用xpath表达式来提取页面数据,在chrome中可以使用XPath Helper来定位元素,非常方便。使用方法:

打开XPath Helper插件

鼠标点击一下页面,按住shift键,把鼠标移动到需要选取的元素上,插件会将该元素标记为黄色,并给出对应的xpath表达式,如下图:

在爬虫程序中使用这个表达式selector.xpath(..../text()").extract()

使用scrapyd把爬虫集成到系统中

编写好爬虫后,我门可以通过执行scrapy crawl spidername命令来运行爬虫程序,但这还不够。

通常我们通过手动或者定时任务(cron)来执行爬虫,而这里我们需要通过web应用来触发爬虫。即,当用户更新绑定的社交账号时,去执行一次爬虫。来分析一下:

爬虫执行过程中会阻塞当前进程,为了不阻塞用户请求,必须通过异步的方式来运行爬虫。

可能有多个用户同时更新资料,这就要求能够同时执行多个爬虫,并且要保证系统不会超载。

可以扩展成分布式的爬虫。

方案1:使用celery运行爬虫

鉴于项目当前的架构,准备使用celery来执行异步爬虫。但是碰到了两个问题:

scrapy框架下,需要在scrapy目录下执行爬虫,否则无法获取到settings,这个用起来有点别扭,不过还能解决。

celery中反复运行scrapy的爬虫会报错:raise error.ReactorNotRestartable()。原因是scrapy用的twisted调度框架,不可以在进程中重启。

stackoverflow上有讨论过这个问题,尝试了一下,搞不定,放弃这个方案。如果你有解决这个问题的方法,期待分享:)

方案2:使用scrapyd

scrapy文档中提到了可以使用scrapyd来部署,scrapyd是一个用于运行scrapy爬虫的webservice,使用者能够通过http请求来运行爬虫。

你只需要使用scrapyd-client将爬虫发布到scrapyd中,然后通过如下命令就可以运行爬虫程序。

$ curl http://localhost:6800/schedule.json -d project=myproject -d spider=spider2
{"status": "ok", "jobid": "26d1b1a6d6f111e0be5c001e648c57f8"}

这意味什么:

爬虫应用和自己的web应用完全解耦,只有一个http接口。

由于使用http接口,爬虫可以放在任何能够被访问的主机上运行。一个简易的分布式爬虫,不是吗?

scrapyd使用sqlite队列来保存爬虫任务,实现异步执行。

scrapyd可以同时执行多个爬虫,最大进程数可配,防止系统过载。

欢迎使用我们的爬虫功能来收集社交资料。

使用方法

成为雨点儿网用户,进入用户主页,点击编辑按钮

填写社交账号,点击更新按钮

爬虫会在几秒内完成工作,刷新个人主页就能看到你的社区资料了,你也可以把个人主页链接附在电子简历中哟:)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/18799.html

相关文章

  • 15个Python库,让你学习数据科学更轻松

    摘要:在本节中,我们将看到一些最流行和最常用的库,用于机器学习和深度学习是用于数据挖掘,分析和机器学习的最流行的库。愿码提示网址是一个基于的框架,用于使用多个或进行有效的机器学习和深度学习。 showImg(https://segmentfault.com/img/remote/1460000018961827?w=999&h=562); 来源 | 愿码(ChainDesk.CN)内容编辑...

    W4n9Hu1 评论0 收藏0
  • 【Sasila】一个简单易用的爬虫框架

    摘要:所以我模仿这些爬虫框架的优势,以尽量简单的原则,搭配实际上是开发了这套轻量级爬虫框架。将下载器,解析器,调度器,数据处理器注入核心成为对象。提供对爬虫进行管理监控。每个脚本被认为是一个,确定一个任务。   现在有很多爬虫框架,比如scrapy、webmagic、pyspider都可以在爬虫工作中使用,也可以直接通过requests+beautifulsoup来写一些个性化的小型爬虫脚本...

    yacheng 评论0 收藏0
  • Scrapy的架构初探

    摘要:引言本文简单讲解一下的架构。没错,开源的通用提取器就是要集成到架构中,最看重的是的事件驱动的可扩展的架构。架构图就是针对特定目标网站编写的内容提取器,这是在通用网络爬虫框架中最需要定制的部分。 1. 引言 本文简单讲解一下Scrapy的架构。没错,GooSeeker开源的通用提取器gsExtractor就是要集成到Scrapy架构中,最看重的是Scrapy的事件驱动的可扩展的架构。除了...

    刘明 评论0 收藏0
  • Python3网络爬虫实战---10、爬虫框架的安装:PySpider、Scrapy

    摘要:所以如果对爬虫有一定基础,上手框架是一种好的选择。缺少包,使用安装即可缺少包,使用安装即可上一篇文章网络爬虫实战爬取相关库的安装的安装下一篇文章网络爬虫实战爬虫框架的安装 上一篇文章:Python3网络爬虫实战---9、APP爬取相关库的安装:Appium的安装下一篇文章:Python3网络爬虫实战---11、爬虫框架的安装:ScrapySplash、ScrapyRedis 我们直接...

    张宪坤 评论0 收藏0

发表评论

0条评论

Yangyang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<