· 原发布于 www.kingname.info

爬虫出海Step by Step(一)

上周的文章《一日一知:国内爬虫开发人员的未来》发布以后,很多同学私信我表示对爬虫出海很有兴趣,希望我能详细介绍一下。因此,我准备用几篇文章来介绍爬虫出海的具体做法细节和注意事项。

今天我们的话题是,如何规避法律风险。

如果你是个人开发者,那么你直接写爬虫爬就可以了。不会有人跨国来抓你的。

如果你是小公司,并且在海外没有分公司,那么你也可以像个人开发者一样直接爬。

如果你是大公司,关注自己的国际声誉;或者你的公司在海外有分公司,那么你需要注意如下的几个问题。

藏好自己

很多网站几乎没有反爬虫机制。你直接使用requests.get(url)就能获取数据,连headers参数都不需要加。网站反不反爬虫是网站的事情,但作为爬虫,把自己伪装成正常的浏览器请求,并使用代理IP是基本的要求和素质。

否则,等有一天有人在推特上@你的公司,并附上了Nginx的IP记录,那你的公司可就倒了大霉了。

GDPR或者其它相关法律条文

GDPR是欧洲的数据保护法规,它要求你不能在未经允许的情况下擅自收集欧洲用户的个人信息。在欧洲运营的互联网公司,数据也不能离开欧洲。

Google和Facebook曾经都因为违反了GDPR而遭受上亿欧元的罚款。如果你的公司在欧洲有分公司,就需要特别注意这一点,否则你将会面临巨额罚款或者被查封公司。

这种情况下,如果你要做爬虫,建议是爬哪个国家的数据,就在那个国家本土部署爬虫。通过Aws或者GCP购买那个国家的服务器,把爬虫部署到服务器上面。同时,Hive/Hue等等数据分析相关的服务,也需要部署到对应的国家。

如果你能招聘外籍员当然最好,只让那边的员工来接触数据。如果你需要让中国的员工去分析数据,那么你需要准备一个VPN,把中国的电脑和爬虫服务器、数据分析服务器组建起一个虚拟的局域网,然后让这边的员工连上去进行操作。

如果最后分析以后的数据,会以网页的形式呈现给客户,也需要把网站搭建在对应国家的服务器上,然后客户通过VPN连上去查看。

如果某个大洲有多个国家都需要爬取,你也可以在Aws或者GCP上购买这个洲的服务器,而不是具体每一个国家。例如你要爬英法意德的数据,你不需要在四个国家各搭建一套系统。整个欧洲共用一套就可以了。

另外,就是无论如何,不要涉及用户个人信息。

数据不只有一家

国外有些网站的反爬虫特别强,例如Facebook,封账号封得非常厉害。又比如App Store的App评论和星级,也不太好直接抓。但是,已经有一些第三方网站使用某种我们不知道的方法,抓了他们的数据并在自家网站公布了,那么,你可以去抓这些第三方网站的数据。

有些网站开放了API,申请他们的API以后,直接就能根据文档调用API拿到数据,例如推特。不过现在推特已经不批准新API的申请了。我们公众号粉丝群里面有一个同学手上还有一个获得了开放API权限的账号,很多人找他借来爬数据。

还有很多网站,直接开放了全文的RSS,你直接解析RSS地址就能拿到最新的内容了。

善于利用网站的多个版本

欧美这些注重政治正确国家,会额外关注残障人士和老年人的网页使用体验,并设置了专门的页面。当主站特别难爬的时候,找到他们给残疾人设计的页面或者老手机设计的页面,爬起来就很容易。

例如Facebook主站非常难爬,但是如果访问https://mbasic.facebook.com/就非常简单,这个版本的页面是给2G老手机使用的,页面上没有JavaScript,所有请求都是通过GET或者POST的参数实现的。

总结

如果你是国内的一家大公司,担心做海外爬虫影响公司的声誉,那么你可以在目标国家开个分公司来爬,或者找对应国家的爬虫外包团队。数据爬好以后,就存在那个国家的服务器上。国内的数据分析员工通过VPN连上去以后,远程分析数据。不要尝试把数据拉回国内。即使加密以后传回国内也不行。

另外,一个数据有多种抓取方式,一种方式不行,就多试几种,总会有一个意想不到的渠道获取数据。

下一篇文章,我们来聊聊怎么寻找数据源。

高级数据挖掘工程师,《Python 爬虫开发 从入门到实战》、《左手 MongoDB 右手 Redis——从入门到商业实战》作者。 微软最有价值专家 MVP。
加入