400-616-5551

您所在位置: 首页> 学习课程> python培训 | Python爬虫:抓取整个互联网的数据

python培训 | Python爬虫:抓取整个互联网的数据

发布百知教育 来源:学习课程 2019-11-25

爬虫,也叫网络爬虫或网络蜘蛛,主要的功能是下载Internet或局域网中的各种资源。如html静态页面、图像文件、js代码等。网络爬虫的主要目的是为其他系统提供数据源,如搜索引擎(Google、Baidu等)、深度学习、数据分析、大数据、API服务等。这些系统都属于不同的领域,而且都是异构的,所以肯定不能通过一种网络爬虫来为所有的这些系统提供服务,因此,在学习网络爬虫之前,先要了解网络爬虫的分类。


如果从按抓取数据的范围进行分类,网络爬虫可以分为如下几类。


全网爬虫:用于抓取整个互联网的数据,主要用于搜索引擎(如Google、Baidu等)的数据源。

站内爬虫:与全网爬虫类似,只是用于抓取站内的网络资源。主要用于企业内部搜索引擎的数据源。

定向爬虫:这种爬虫的应用相当广泛,我们讨论的大多都是这种爬虫。这种爬虫只关心特定的数据,如网页中的PM2.5实时监测数据,天猫胸罩的销售记录、美团网的用户评论等。抓取这些数据的目的也五花八门,有的是为了加工整理,供自己的程序使用,有的是为了统计分析,得到一些有价值的结果,例如,哪种颜色的胸罩卖的最好。



本文主要讲解第一类爬虫,全网爬虫的实现。

由于整个互联网的数据过于庞大,所以这里用了一些网页模拟整个互联网的页面,来模拟抓取这些页面。

这里使用7个HTML文件来模拟互联网资源,并将这7个HTML文件放在本地的nginx服务器的虚拟目录,以便抓取这7个HTML文件。

全网爬虫要至少有一个入口点(一般是门户网站的首页),然后会用爬虫抓取这个入口点指向的页面,接下来会将该页面中所有链接节点(a节点)中href属性的值提取出来。这样会得到更多的Url,然后再用同样的方式抓取这些Url指向的HTML页面,再提取出这些HTML页面中a节点的href属性的值,然后再继续,直到所有的HTML页面都被分析完为止。只要任何一个HTML页面都是通过入口点可达的,使用这种方式就可以抓取所有的HTML页面。这很明显是一个递归过程,下面就用伪代码来描述这一递归过程。

 

从前面的描述可知,要实现一个全网爬虫,需要下面两个核心技术。

下载Web资源(html、css、js、json)

分析Web资源


假设下载资源通过download(url)函数完成,url是要下载的资源链接。download函数返回了网络资源的文本内容。analyse(html)函数用于分析Web资源,html是download函数的返回值,也就是下载的HTML代码。analyse函数返回一个列表类型的值,该返回值包含了HTML页面中所有的URL(a节点href属性值)。如果HTML代码中没有a节点,那么analyse函数返回空列表(长度为0的列表)。下面的drawler函数就是下载和分析HTML页面文件的函数,外部程序第1次调用crawler函数时传入的URL就是入口点HTML页面的链接。


python培训班


下图是这7个页面的关系图,从index.html页面可以导航到任何一个html页面,所以只要从index.html开始抓取,就会抓取到所有的html页面。


python培训班


从上图可以看到,b.html、aa.html、bb.html和cc.html文件中并没有a节点,所以这4个HTML文件是递归的终止条件。


下面是基于递归算法的爬虫的代码。



python培训班


注意:本文的例子使用了nginx服务器,所以应该将本例所有的html页面放置nginx虚拟目录的files子目录下。以便可以通过http://localhost/files/index.html访问该页面。


抓取的效果如下图所示。


python培训班


python培训:http://www.baizhiedu.com/python2019


上一篇:java培训班 | java编程基础:java位运算符

下一篇:应届生去公司找个Java程序员的职位需要什么技能?

相关推荐

www.baizhiedu.com

有位老师想和您聊一聊

关闭

立即申请