论文部分内容阅读

如是,理解爬虫的原理就简单了。设计者需要做的,是为爬虫制定规则,爬取特定的属性/标签下的数据。
Python是近年流行的编程语言,以它为例,可以了解爬虫的工作原理:
假设,张三在知乎注册账户,用户名叫“张三”。现在,我们要爬取他的所有动态信息。第一步,我们需要找到的,是张三评论所在的网址(url)。
得到了对应网址,下一步调用模块request.get(),字面意义是:向服务器发起请求、获取该网址的数据。那么,张三评论的所有数据,就都在其中了。
此时,我们想要的评论,依然藏在一堆庞杂的字符中。所以,在接下来,我们需要确定数据的性质,如用户名是张三(name =‘ zhangsan’),将这一属性的数据筛选出来。
所谓爬虫的规则,即是经过层层筛选,最终得到目标信息。这还没完。 上述的步骤,只是自动化地获取、筛选了数据,但没有罗列出来。当数据量极大时,一条一条罗列数据,显然并不现实。因此,爬虫的设计者,还要制定一定的规则,将数据按规则打印。如,列出张三的评论内容、评论时间、评论网址……
如此操作完,会自动生成一个数据表格(格式可能不同),爬虫的工作就结束了。在这张表格中,张三评论的所有信息,一望可知。
正因如此,拼多多1月11日的回复中,那张表格尤其可疑。表格中罗列了四条“极端言论”,且信息的属性完整,分别是用户名、ID、内容、时间、网址。更增加了嫌疑的是,“属性”用英文写成:username\ID\comment\time\url,这是符合编程规范的。
对此,拼多多官方没有回应质疑。
但在1月11日,据媒体报道,拼多多相关人员回复,否认信息是通过爬虫获取,并解释道,“是公司多人通过公开的网页浏览,搜索、比对发帖账户ID发现的”。
这一解释并非不可能。但如前文所述,仅凭一串标识字符(ID),人工地浏览海量数据,并且追溯了三个月内的信息,再一个一个列表出来,工作量是庞大的。
当然,不能排除拼多多日以继夜地“996”式搜查,且“公司多人”指的是很多很多很多人。
无论如何,质疑与辩解的双方,都没有拿出证据来。究竟是何种获取方式,现今只能各凭各据。
协 议
鸡毛撒了一地后,有不少网友揶揄,最大的“受害者”是脉脉。这一次事件,暴露了匿名社区的不可靠。如前文所说,无论是爬虫技术,或者是人海战术,都可以破解脉脉的匿名机制。
罪魁祸首在于,ID这一标识性极强的属性,在脉脉的网页中居然“明文显示”—对匿名社区来说,这是不可思议的。
此处的“明文”,对普通用户不成立。这是因为,即使外显了ID,普通用户也无法据此搜索。但对有一定网页设计知识的人来说,只需打开“查看网页源代码”,所有数据都在眼前,而ID就成为可追查的“锚”。
是的,在大多数网站上,用户的行为全被记录下来。对具备一定技术的人来说,用户们都是“透明人”。
是的,在大多数网站上,用户的行为全被记录下来。对具备一定技术的人来说,用户们都是“透明人”。
通俗的解释是,普通用户每一次的点击链接,是一次对服务器的请求(request),而每一次网页的呈现,是服务器对请求作出的回应(response)。这一切对技术人员来说,全部有迹可循。如果有心,通过对请求的分析,就可以获知请求者的身份、设备、IP地址等信息。
不过,人工查找费时费力,在有了爬虫代劳后,性质也就不同了。数据可以批量地、有规则地获取,且过程自动化,所占的不过是存儲而已。
恶意爬虫的存在,显然是对信息/数据安全的威胁。包括脉脉在内,大多数网站上,都设计有“机器人协议”,其中规定了,哪些信息不允许爬取(disallow),哪些信息允许爬取(allow)。
打开脉脉的“机器人协议”,规定不许爬取的内容共18项,其后的允许项目,分别是对“360”和“haosou”公司的爬虫开放。—搜索引擎本身是爬虫,将爬取到的数据存入服务器,以供用户的搜索之用。因此,对搜索引擎开放爬虫协议,是为了获取关注度,这无可非议。
那就是说,在原则上,除了360和haosou,其它爬虫无权爬取脉脉数据。但在现实生活中,这个原则几乎等于不存在。
原因有两方面。一是技术层面,网址虽然拒绝爬虫,但爬虫的设计者可以伪装,将爬虫行为模拟为人类的行为,比如伪造“请求头”(request header),设计访问次数、时间间隔等。
二是法律方面,事实上,“机器人协议”没有强制力。司法实践中,截至目前,没有因违反“机器人协议”而入罪的案例。主流的观点认为,它是一种技术协议,而非法律认可的规范。
也因此,机器人协议被戏称“君子协议”。但很显然,一个行业如果靠道德自律,“君子”是远远不够用的。