We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
社区活跃度或者贡献越来越受到重视,往往会作为获得工作或者承接项目的加分项。为了方便用户展示自己的社区资料,雨点儿网中增加了一个社区爬虫功能。 当前只爬取了用户主页上一些简单的信息,如果有需求请提到我们的项目议题中
效果如下:
如图所示,在之前的架构上,我增加了橙色虚线框内的部分,包括: scrapyd:一个用于运行爬虫任务的webservice spiders:使用scrapy框架实现的爬虫 mongo:存放爬取的数据
橙色虚线框
scrapy是一个python爬虫框架,想要快速实现爬虫推荐使用这个。 可以参考如下资料自行学习: 1.官方文档和官方例子 2.一个简单明了的入门博客,注意:博客中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
apt-get install mongodb
pip install pymongo
在编写爬虫的过程中需要使用xpath表达式来提取页面数据,在chrome中可以使用XPath Helper来定位元素,非常方便。使用方法: 1.打开XPath Helper插件 2.鼠标点击一下页面,按住shift键,把鼠标移动到需要选取的元素上,插件会将该元素标记为黄色,并给出对应的xpath表达式,如下图:
3.在爬虫程序中使用这个表达式selector.xpath(..../text()").extract()
selector.xpath(..../text()").extract()
编写好爬虫后,我门可以通过执行scrapy crawl spidername命令来运行爬虫程序,但这还不够。 通常我们通过手动或者定时任务(cron)来执行爬虫,而这里我们需要通过web应用来触发爬虫。即,当用户更新绑定的社交账号时,去执行一次爬虫。来分析一下: 1.爬虫执行过程中会阻塞当前进程,为了不阻塞用户请求,必须通过异步的方式来运行爬虫。 2.可能有多个用户同时更新资料,这就要求能够同时执行多个爬虫,并且要保证系统不会超载。 3.可以扩展成分布式的爬虫。
scrapy crawl spidername
鉴于项目当前的架构,准备使用celery来执行异步爬虫。但是碰到了两个问题: 1.scrapy框架下,需要在scrapy目录下执行爬虫,否则无法获取到settings,这个用起来有点别扭,不过还能解决。 2.celery中反复运行scrapy的爬虫会报错:raise error.ReactorNotRestartable()。原因是scrapy用的twisted调度框架,不可以在进程中重启。 stackoverflow上有讨论过这个问题,尝试了一下,搞不定。放弃这个方案。 如果你有解决这个问题的方法,期待分享:)
raise error.ReactorNotRestartable()
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"}
这意味什么: 1.爬虫应用和自己的web应用完全解耦,只有一个http接口。 2.由于使用http接口,爬虫可以放在任何能够被访问的主机上运行。一个简易的分布式爬虫,不是吗? 3.scrapyd使用sqlite队列来保存爬虫任务,实现异步执行。 4.scrapyd可以同时执行多个爬虫,最大进程数可配,防止系统过载。
欢迎使用我们的爬虫功能来收集社交资料。
1 成为雨点儿网用户,进入用户主页,点击编辑按钮 2 填写社交账号,点击更新按钮 3 爬虫会在几秒内完成工作,刷新个人主页就能看到你的社区资料了,你也可以把个人主页链接附在电子简历中哟:)
The text was updated successfully, but these errors were encountered:
No branches or pull requests
序
社区活跃度或者贡献越来越受到重视,往往会作为获得工作或者承接项目的加分项。为了方便用户展示自己的社区资料,雨点儿网中增加了一个社区爬虫功能。
当前只爬取了用户主页上一些简单的信息,如果有需求请提到我们的项目议题中
效果如下:
功能实现
如图所示,在之前的架构上,我增加了
橙色虚线框
内的部分,包括:scrapyd:一个用于运行爬虫任务的webservice
spiders:使用scrapy框架实现的爬虫
mongo:存放爬取的数据
使用scrapy框架
scrapy是一个python爬虫框架,想要快速实现爬虫推荐使用这个。
可以参考如下资料自行学习:
1.官方文档和官方例子
2.一个简单明了的入门博客,注意:博客中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来定位元素,非常方便。使用方法:
1.打开XPath Helper插件
2.鼠标点击一下页面,按住shift键,把鼠标移动到需要选取的元素上,插件会将该元素标记为黄色,并给出对应的xpath表达式,如下图:
3.在爬虫程序中使用这个表达式
selector.xpath(..../text()").extract()
使用scrapyd把爬虫集成到系统中
编写好爬虫后,我门可以通过执行
scrapy crawl spidername
命令来运行爬虫程序,但这还不够。通常我们通过手动或者定时任务(cron)来执行爬虫,而这里我们需要通过web应用来触发爬虫。即,当用户更新绑定的社交账号时,去执行一次爬虫。来分析一下:
1.爬虫执行过程中会阻塞当前进程,为了不阻塞用户请求,必须通过异步的方式来运行爬虫。
2.可能有多个用户同时更新资料,这就要求能够同时执行多个爬虫,并且要保证系统不会超载。
3.可以扩展成分布式的爬虫。
方案1:使用celery运行爬虫
鉴于项目当前的架构,准备使用celery来执行异步爬虫。但是碰到了两个问题:
1.scrapy框架下,需要在scrapy目录下执行爬虫,否则无法获取到settings,这个用起来有点别扭,不过还能解决。
2.celery中反复运行scrapy的爬虫会报错:
raise error.ReactorNotRestartable()
。原因是scrapy用的twisted调度框架,不可以在进程中重启。stackoverflow上有讨论过这个问题,尝试了一下,搞不定。放弃这个方案。
如果你有解决这个问题的方法,期待分享:)
方案2:使用scrapyd
scrapy文档中提到了可以使用scrapyd来部署,scrapyd是一个用于运行scrapy爬虫的webservice,使用者能够通过http请求来运行爬虫。
你只需要使用scrapyd-client将爬虫发布到scrapyd中,然后通过如下命令就可以运行爬虫程序。
这意味什么:
1.爬虫应用和自己的web应用完全解耦,只有一个http接口。
2.由于使用http接口,爬虫可以放在任何能够被访问的主机上运行。一个简易的分布式爬虫,不是吗?
3.scrapyd使用sqlite队列来保存爬虫任务,实现异步执行。
4.scrapyd可以同时执行多个爬虫,最大进程数可配,防止系统过载。
尾
欢迎使用我们的爬虫功能来收集社交资料。
使用方法
1 成为雨点儿网用户,进入用户主页,点击编辑按钮
2 填写社交账号,点击更新按钮
3 爬虫会在几秒内完成工作,刷新个人主页就能看到你的社区资料了,你也可以把个人主页链接附在电子简历中哟:)
The text was updated successfully, but these errors were encountered: