朋友让我帮忙爬取一些数据,由于目标网站(
http://epub.sipo.gov.cn/gjcx.jsp) 采用的防爬虫策略,简单的模拟请求不行,使用 headless browser 简单试了一下,也不行; 由于我并不怎么做爬虫这块,想到在前端使用 js 爬取再提交到后端应该是最简单的,于是在浏览器中简单实验之后发现是可行的。
于是写了一个后端服务用于分配任务和收集结果
https://github.com/webee/PatentFetcher后端提供两个接口给前端爬虫使用:分配任务,提交结果
前端提供一个 user script 执行具体爬取
打开多个标签(注:浏览器有单个 ip 连接数限制),或多个浏览器, 甚至开不同的机器就可以实现分布式并行前端爬取了。
搞定这个事情之后,就有个想法:
前端爬取其实跟使用 headless browser ( Selenium,PhantomJS 等)原理一样的,都是模拟真实的前端环境,但这里的关键是分散地使用真实的客户端, 利用人们空闲的计算和流量资源,而不是使用自己的服务器。
这可以解决许多复杂爬取面临地很多痛点:ip 限制,人机验证,足够的服务器,爬取速率等
是否可以使这个方法通用化,类似众包的方式,搞一个任务平台,设计不同的执行前端( pc 客户端,浏览器 user script, app sdk, 专门的 app ),通过给用户付费,或者给开发者任务积分实现互助爬取,以解决一些复杂网站的爬取问题?
我搜索了一下关于前端爬虫的项目,有些是纯独立客户端的前端爬取,有个类似想法的 DSpider,没怎么开发了。
一个人的想法总是有局限的,
欢迎大家讨论一下,这个事儿是否有意义,是否可行?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/579714
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.