我们可以把网路比作一张大网,而爬虫便是在网上爬行的蜘蛛,可以把网的节点比作一个个网页,爬虫爬到这就相当于访问了该页面获取了信息,节点间的连线比作网页与网页间的链接,这样蜘蛛通过一个节点后可以顺着节点连线继续爬行到下一个节点,即通过一个网页继续获取后续的网页,这样整个网页的节点便可以被蜘蛛全部爬行,这样网站的数据就可以被抓去下来了。
1.爬虫概述
爬虫就是获取网页信息并提取和保存信息的自动化程序,接下来对个点进行说明:
获取网页
爬虫的第一步工作是获取网页,在这里获取网页就是获取网页的源代码,源代码里包含网页的部分有用信息,只要把源代码获取下来,就可以从中提取我们想要的信息。
获取网页源代码的关键是构造一个Request并发送给服务器,然后接收到Response并将其解析,我们可以使用Python中提供的库来实现这个操作,如Urllib、Requests等,Request和Response都可以用类库提供数据结构来表示,得到Response之后只需解析数据结构中的Body部分即可,也就是网页源代码。
提取信息
在完成第一步获取网页源代码后,接下来就是分析网页源代码,从中提取我们想要的数据,主要有两种方法来提取信息:
第一种方法,通过正则表达式提取,这是一个万能的方法,但在构造正则表达式的时候比较复杂且容易出错。
第二种方法,网页的结构是有一定规则的,所以有一些根据网页节点属性、CSS选择器或XPath来提取网页信息的库,如BeautifulSoup、PyQuery、LXML等,使用这些库可以高效快速地从网页中提取信息,如节点的属性、文本值等内容。
提取信息是爬虫非常重要的部分,可以使杂乱的数据变得清晰条理,以便于我们后续对数据进行处理和分析。
保存数据
提取数据后我们一般会将提取到的数据保存在某处以便后续处理数据使用。保存形式有很多种,可以简单保存为TXT文本或Json文本,也可以保存到数据库,如MySQL、MongoDB等,也可保存至远程服务器,如借助Sftp进行操作等。
自动化程序
即爬虫可以代替人来完成上述工作,我们可以手工提取这些信息,但当量特别大或者想快速获取大量数据的话就需要借助程序了。爬虫就是代替我们来完成这份爬取数据的工作的自动化程序,它可以在抓去过程中进行各种异常处理、错误重试等操作,确保爬取持续有效地运行。
2.能抓取怎样的数据
HTML源代码,在网页中可以看到各种各样的信息,最常见的便是常规网页,其都对应着HTML代码。
Json字符串,有些网页返回的不是HTML代码,而是返回一个Json字符串,API接口大多采用这样的方式,方便数据的传输和解析,这种数据同样可以抓取,而且数据提取更加方便。
二进制数据,网页中还有各种二进制数据,如图片、视频、音频等,我们可以利用爬虫将它们的二进制数据抓取下来,然后保存对应的文件名。
各种扩展名的文件,如CSS、JavaScript、配置文件等,这些也是普通的文件,只要在浏览器里能访问到就可以将其抓取下来。
以上内容都对应着各自的URL,是基于HTTP或HTTPS协议的,只要是这种数据都可以进行抓取。
3.JavaScript渲染页面
有时在用Urllib或Requests抓取网页时,得到的源代码和浏览器中看到的是不一样的。
这是一个常见问题,现在网页越来越多采用Ajax、前端模块化工具来构建页面,整个网页可能都是JavaScript渲染出来的,意思就是说原始的HTML代码就是一个空壳。
对于一个使用JavaScript渲染出来的网页,在使用Urllib或Requests等库来请求页面时,得到的只是HTML代码,它不会帮助我们继续加载JavaScript文件,这样也就看不到浏览器中的内容了。对于这种情况,我们可以分析其后台Ajax接口,也可使用Selenium、Splash这样的库来实现JavaScript渲染,这样我们便可以爬取JavaScript渲染页面的内容。