Crunchbeats: Spear and Shield
Crunchbeats项目是针对crunchbase的公开数据采集项目
Spear 0x01
由于crunchbase并没有提供任何company/organisation index,而且categories也是仅面向Pro(氪金)用户的search。因此,作为数据采集,我们首先需要一份可用的索引来引导具体的采集任务。
清单是利用了一个非常trick的方式来获取的。首先我们已经知道,org_name有意义的(即会被fuzz search注意的)也就0-9a-z这31个字符。然后在instant search的api里,结果虽然只给至多15个,但是实际总数也会暴露在response里。因此可以通过穷举来获取一份总org_name清单。
Shield 0x01
当然按照其他情况来说,全站下载也是个不错的方法。但是在crunchbase里,有如下几个因素导致此方案不可行。首先就是无法判断是否已经全网下载。下载任务结束并不意味着全部下载完成,很可能只是陷入站内url闭环回路。没有一份清单而爬取数据只会徒增成本,招ban。
Shield 0x02
效率低下。crunchbase包含了public界面,pro可见界面,try pro可见界面,而除了org以外还有industry,group等其他模块,因此全站下载下载到的资源可用率极低。
Shield 0x03
crunchbase使用了cloudflare,在cookie里可以看到这个__cfdid
Cookies Search Results: __cfduid
About this cookie:
Cookie associated with sites using CloudFlare, used to speed up page load times. According to CloudFlare it is used to override any security restrictions based on the IP address the visitor is coming from. It does not contain any user identification information.
虽然quora上说是distil提供的 https://www.quora.com/How-do-you-crawl-Crunchbase-and-bypass-the-bot-protection
反正就是会有看脸的bot检测,具体是让你press and hold一个button,然后再看脸让你通过。
Spear 0x02
我最开始想的其实是走bypass bot detection。毕竟以前绕cf找源站的文章看的有点多,https://www.anquanke.com/post/id/183238
但是当时对无CDN加持下的origin IP能否直接國内访问十分怀疑,因此没有实现。
Spear 0x03
后来选择的还是和对方硬碰硬。可以发现人家不管你登陆没登陆,过量的请求就会ban。至于sleep,少量sleep等于没睡,长时间sleep等于没干活。
因此就决定展开proxy池,咬牙花了点重金(几十块)买了proxy的服务。
Shield 0x04
但是proxy在cf和gfw面前真的很脆弱。几千几万个proxy中只有数个能访问网站(经过墙),然后在网站面前被cf揍死。
Spear 0x04
因为一开始是requests进行的网络请求,全都是python也就不处理任何js,遇到challenge就停下来让人手摇解禁。效率就很低。为了效率,尝试了利用selenium(webdriver)来处理请求。首先的确利用chrome+firefox的自动challenge可以降低被ban的几率,但是和requests比起来真的是太慢了……尤其是在笔记本上,换句话说就是出师未捷身先死了。
Spear 0x05
后来通过手里闲置的几台tx云学生机
[WIP]
New solution
New solution to overcome the ip blacklist: Vultr/GCP/AWS => unlimited new machine/ip with low fee