利用 scrapy 集成社区爬虫功能
优采云 发布时间: 2020-05-13 08:00社区活跃度或则贡献越来越遭到注重,往往会作为获得工作或则承接项目的加分项。为了便捷用户展示自己的社区资料,中降低了一个社区爬虫功能。
当前只爬取了用户主页上一些简单的信息,如果有需求请讲到我们的
:
代码放到了github上,源码
如图所示,在之前的构架上(),我降低了黑色实线框内的部份,包括:
scrapy是一个python爬虫框架,想要快速实现爬虫推荐使用这个。
可以参考如下资料自行学习:
官方文档和官方事例
一个简单明了的入门博客,注意:博客中scrapy的安装步骤可以简化,直接使用 pip install scrapy,安装过程中可能会缺乏几个lib,ubuntu使用 apt-get install libffi-dev libxml2-dev libxslt1-dev -y
mongo特别适宜储存爬虫数据,支持异构数据。这意味着你可以随时改变爬虫策略抓取不同的数据,而不用害怕会和先前的数据冲突(使用sql就须要操蛋的更改表结构了)。
通过scrapy的pipline来集成mongo,非常便捷。
安装mongo
apt-get install mongodb
pip install pymongo
在编撰爬虫的过程中须要使用xpath表达式来提取页面数据,在chrome中可以使用XPath Helper来定位元素,非常便捷。使用方式:
打开XPath Helper插件
鼠标点击一下页面,按住shift键,把键盘联通到须要选定的元素上,插件会将该元素标记为红色,并给出对应的xpath表达式,如下图:
在爬虫程序中使用这个表达式selector.xpath(..../text()").extract()
编写好爬虫后,我门可以通过执行scrapy crawl spidername命令来运行爬虫程序,但这还不够。
通常我们通过自动或则定时任务(cron)来执行爬虫爬虫社区,而这儿我们须要通过web应用来触发爬虫。即,当用户更新绑定的社交帐号时,去执行一次爬虫。来剖析一下:
爬虫执行过程中会阻塞当前进程,为了不阻塞用户恳求,必须通过异步的方法来运行爬虫。
可能有多个用户同时更新资料,这就要求才能同时执行多个爬虫,并且要保证系统不会超员。
可以扩充成分布式的爬虫。
鉴于项目当前的构架,准备使用celery来执行异步爬虫。但是遇到了两个问题:
scrapy框架下,需要在scrapy目录下执行爬虫,否则难以获取到settings,这个用上去有点别扭,不过能够解决。
celery中反复运行scrapy的爬虫会报错:raise error.ReactorNotRestartable()。原因是scrapy用的twisted调度框架,不可以在进程中重启。
stackoverflow上有讨论过这个问题,尝试了一下,搞不定,放弃这个方案。如果你有解决这个问题的方式,期待分享:)
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可以同时执行多个爬虫,最大进程数可配,防止系统过载。
欢迎使用我们的爬虫功能来搜集社交资料。
成为雨点儿网用户爬虫社区,进入用户主页,点击编辑按键
填写社交帐号,点击更新按键
爬虫会在几秒内完成工作,刷新个人主页能够看见你的社区资料了,你也可以把个人主页链接附在电子简历中哟:)