异步社区

异步社区是国内领先的IT专业图书社区,由人民邮电出版社主办,致力于优质学习内容的出版和分享。

34篇博客

网络爬虫简介(1)

异步社区2018-12-20 10:27
欢迎访问 网易云社区,了解更多网易技术产品运营经验。  

欢迎来到网络爬虫的广阔天地!网络爬虫被用于许多领域,收集不太容易以其他格式获取的数据。你可能是正在撰写新报道的记者,也可能是正在抽取新数据集的数据科学家。即使你只是临时的开发人员,网络爬虫也是非常有用的工具,比如当你需要检查大学网站上最新的家庭作业并且希望通过邮件发送给你时。无论你的动机是什么,我们都希望你已经准备好开始学习了!

在本章中,我们将介绍如下主题:
网络爬虫领域简介;
解释合法性质疑;
介绍Python 3安装;
对目标网站进行背景调研;
逐步完善一个高级网络爬虫;
使用非标准库协助抓取网站。

1.1网络爬虫何时有用
假设我有一个鞋店,并且想要及时了解竞争对手的价格。我可以每天访问他们的网站,与我店铺中鞋子的价格进行对比。但是,如果我店铺中的鞋类品种繁多,或是希望能够更加频繁地查看价格变化的话,就需要花费大量的时间,甚至难以实现。再举一个例子,我看中了一双鞋,想等到它促销时再购买。我可能需要每天访问这家鞋店的网站来查看这双鞋是否降价,也许需要等待几个月的时间,我才能如愿盼到这双鞋促销。上述这两个重复性的手工流程,都可以利用本书介绍的网络爬虫技术实现自动化处理。在理想状态下,网络爬虫并不是必需品,每个网站都应该提供API,以结构化的格式共享它们的数据。然而在现实情况中,虽然一些网站已经提供了这种API,但是它们通常会限制可以抓取的数据,以及访问这些数据的频率。另外,网站开发人员可能会变更、移除或限制其后端API。总之,我们不能仅仅依赖于API去访问我们所需的在线数据,而是应该学习一些网络爬虫技术的相关知识。

1.2 网络爬虫是否合法 
尽管在过去20年间已经做出了诸多相关裁决,不过网络爬虫及其使用时法律所允许的内容仍然处于建设当中。如果被抓取的数据用于个人用途,且在合理使用版权法的情况下,通常没有问题。但是,如果这些数据会被重新发布,并且抓取行为的攻击性过强导致网站宕机,或者其内容受版权保护,抓取行为违反了其服务条款的话,那么则有一些法律判例可以提及。 

在Feist Publications, Inc.起诉Rural Telephone Service Co.的案件中,美国联邦最高法院裁定抓取并转载真实数据(比如,电话清单)是允许的。在澳大利亚,Telstra Corporation Limited起诉Phone Directories Company Pty Ltd这一类似案件中,则裁定只有拥有明确作者的数据,才可以受到版权的保护。而在另一起发生于美国的美联社起诉融文集团的内容抓取案件中,则裁定对美联社新闻重新聚合为新产品的行为是侵犯版权的。此外,在欧盟的ofir.dk起诉home.dk一案中,最终裁定定期抓取和深度链接是允许的。

还有一些案件中,原告控告一些公司抓取强度过大,尝试通过法律手段停止其抓取行为。在最近的QVC诉讼Resultly的案件中,最终裁定除非抓取行为造成了私人财产损失,否则不能被认定为故意侵害,即使爬虫活动导致了部分站点的可用性问题。这些案件告诉我们,当抓取的数据是现实生活中真实的公共数据(比如,营业地址、电话清单)时,在遵守合理的使用规则的情况下是允许转载的。但是,如果是原创数据(比如,意见和评论或用户隐私数据),通常就会受到版权限制,而不能转载。无论如何,当你抓取某个网站的数据时,请记住自己是该网站的访客,应当约束自己的抓取行为,否则他们可能会封禁你的IP,甚至采取更进一步的法律行动。这就要求下载请求的速度需要限定在一个合理值之内,并且还需要设定一个专属的用户代理来标识自己的爬虫。你还应该设法查看网站的服务条款,确保你所获取的数据不是私有或受版权保护的内容。如果你还有疑虑或问题,可以向媒体律师咨询你所在地区的相关判例。你可以自行搜索下述法律案件的更多信息Feist Publications Inc.起诉Rural Telephone Service Co.的案件。
Telstra Corporation Limited起诉Phone Directories Company Pvt Ltd的案件。
美联社起诉融文集团的案件。
ofir.dk起诉home.dk的案件。
QVC起诉Resultly的案件。

1.3 Python 3
在本书中,我们将完全使用Python 3进行开发。Python软件基金会已经宣布Python 2将会被逐步淘汰,并且只支持到
2020年;出于该原因,我们和许多其他Python爱好者一样,已经将开发转移到对Python 3的支持当中,在本书中我们将使用3.6版本。本书代码将兼容Python 3.4+的版本。
如果你熟悉Python Virtual Environments或Anaconda的使用,那么你可能已经知道如何在一个新环境中创建Python 3了。如果你希望以全局形式安装Python 3,那么我们推荐你搜索自己使用的操作系统的特定文档。就我而言,我会直接使用Virtual Environment Wrapper(https://virtualenvwrapper.readthedocs.io/en/latest),这样就可以很容易地对不同项目和Python版本使用多个不同的环境了。使用Conda环境或虚拟环境是最为推荐的,这样你就可以轻松变更基于项目需求的依赖,而不会影响到你正在做的其他工作了。对于初学者来说,我推荐使用Conda,因为其需要的安装工作更少一些。Conda的介绍文档(https://conda.io/docs/intro.html)是一个不错的开始!从此刻开始,所有代码和命令都假设你已正确安装Python 3并且正在使用Python 3.4+的环境。如果你看到了导入或语法错误,请检查你是否处于正
确的环境当中,查看跟踪信息中是否存在Python 2.7的文件路径。

原文网址:https://www.epubit.com/book/detail/33225
内容来源:异步社区;版权属【人民邮电出版社 异步社区】所有,转载已获得授权;未经授权,不得以任何方式复制和传播本书内容,如需转载请联系异步社区。