第3章〓数据采集 数据采集的渠道 包括设备来源、系统导出、网络采集等 ,通过使用第三方库Requests库、Selenium库,可以对网页数据进行抓取,但采集数据时要注意采集渠道的合法性。本章主要介绍网络公开数据的采集方法。 3.1爬虫概述 3.1.1爬虫的基本概念 网络爬虫又称网页蜘蛛、网络机器人,是一种按照一定的规则自动请求互联网网站并提取网络数据的程序或脚本。它可以代替人们自动化浏览网络中的信息,进行数据的采集与整理。它也是一种程序,基本原理是向网站/网络发起请求,获取资源后分析并提取有用数据。 百度、谷歌等人们常用的搜索引擎就属于爬虫的应用,其主要目的是将互联网上的网页下载到本地,从而形成一个互联网内容的镜像备份。百度搜索引擎的爬虫叫作百度蜘蛛(Baiduspider),360的爬虫叫作360Spider,搜狗的爬虫叫作Sogouspider,必应的爬虫叫作Bingbot。 3.1.2爬虫的合法性 1. 法律规范 我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜。例如,一些人为了获取经济利益,将爬虫作为一种犯罪工具,严重扰乱了计算机信息系统的运行秩序,或者侵害了公民的个人信息,构成了犯罪并触犯刑法。经梳理,在司法实践中,使用爬虫技术的犯罪主要有侵犯公民个人信息罪、非法获取计算机信息系统数据罪、破坏计算机信息系统罪、非法侵入计算机信息系统罪、侵犯著作权罪等。 然而,爬虫本身并没有错,人们应该合法使用爬虫技术来获取数据。判断爬虫合法性边界可以参考以下因素: (1) 数据是否属于开放数据: 数据是否公开不是合法性判断的标准,公开数据不等同于开放数据。如果数据权利方在Robots协议或网页中告知了可以爬取的范围及其他应遵守的义务,则爬取方没有遵守义务时应当承担相应民事责任。 (2) 取得数据的手段是否合法: 爬虫采用的技术是否突破数据访问控制,法律上是否突破网站或App的Robots协议。如果突破网站或App的Robots协议及设置的爬虫检测、加固Web站点等限制爬虫的访问权限,则可能会违法,要承担相应的责任。 (3) 使用目的是否合法: 如果爬虫的目的是实质性替代被爬虫经营者提供的部分产品内容或服务,则会被认为目的不合法。如果爬虫导致经营者增加运营成本,或者破坏系统正常运行,则都属于违法行为。 2. Robots协议 为了更好地获得推广,同时又能保护网站权益,大部分网站会定义一个robots.txt文件作为君子协议。通过Robots协议告诉人们哪些页面可以抓取,哪些页面不能抓取。该协议是国际互联网界通行的道德规范,其建立基于以下原则: (1) 搜索技术应服务于人类,同时尊重信息提供者的意愿,并维护其隐私权。 (2) 网站有义务保护其使用者的个人信息和隐私不被侵犯。 例如,访问https://www.qunar.com/robots.txt去哪儿网的 Robots 协议地址,得到以下结果。 # www.qunar.com robots.txt User-Agent: * Disallow: /booksystem/ Disallow: /atlas/ Disallow: /twell/flight/ Disallow: /twell2/flight/ Disallow: /suggest/ Disallow: /site/adframe/ Disallow: /site/config/ Disallow: /site/oneway_list.htm Disallow: /site/roundtrip_list.htm Disallow: /twell/redirect.jsp Disallow: /twell/hotel/ Disallow: /twell/scripts/ Disallow: /user/ Disallow: /unsub.htm Disallow: /*ex_track=* Disallow: /*bd_source=* Disallow: /*kwid=* Disallow: /*cooperate=* Disallow: /*bdsource=* 其中,Useragent用于描述搜索引擎robot的名字。 在robots.txt中,至少要有一条Useragent记录。如果有多条Useragent记录,则说明有多个robot会受到该协议的限制。若该项的值设为“*”,则该协议对任何搜索引擎都有效,且这样的记录只能有一条。 Allow用于描述希望被访问的一组URL,这个URL可以是一条完整的路径,也可以是部分路径。 Disallow 用于描述不希望被访问的一组URL。任何一条Disallow记录为空,都说明该网站的所有部分允许被访问。在robots.txt文件中,至少要有一条Disallow记录。 访问腾讯网的Robots 协议地址https://www.qq.com/robots.txt,得到以下结果。 User-agent: * Disallow: Sitemap: http://www.qq.com/sitemap_index.xml 这里出现了Sitemap,打开此链接,截取部分结果如图31所示。 图31Sitemap网站地图 在Sitemap.xml文件(网站地图)中,列出了网站中的网址和每个网址的其他元数据,如上次更新的时间、更新的频率及相对于网站上其他网址的重要程度等,以便于爬虫可以更加智能地爬取网站。但是,该文件经常会出现缺失或过期的问题,如腾讯Sitemap最后更新时间为2011年。 3.2网页与爬虫 爬虫是从网页上爬取数据,因此,了解一些Web前端的相关知识是必要的。 3.2.1URL 爬虫最主要的处理对象就是URL,它根据URL地址取得所需要的文件内容,然后对其进行进一步的处理。因此,准确地理解URL对理解网络爬虫至关重要。统一资源定位系统(Uniform Resource Locator,URL)是因特网的万维网服务程序上用于指定信息位置的表示方法,它包含了文件的位置及浏览器处理方式等信息。 URL的结构为“协议://主机地址(IP地址或域名): 端口号/路径?参数名=参数值”,如图32所示。 图32URL结构 在URL中,协议通常指超文本传输协议。如果协议头是ftp,表示提供的是文件传输服务。在域名后,有时还会加上端口号,HTTP默认端口为80,HTTPS默认端口为443。对于大部分 Web 资源,通常使用HTTP或其安全版本HTTPS。 3.2.2认识网页结构 要从网页中爬取用户需要的数据,除了需要了解URL外,还需要认识网页的结构。网页一般由3部分组成,分别是HTML(超文本置标语言)、CSS(层叠样式表)和JavaScript(活动脚本语言)。 例如,打开去哪儿网(https://www.qunar.com/),按F12键可以看到一个网页结构,如图33所示。在图33中,上半部分为HTML文件,下半部分为CSS样式。CSS是在HTML中设置字体、表格、图像等元素样式的语言,它不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化(一般用来定义外观)。用