Python的爬虫库其实很多,像常见的urllib,requests,bs4,lxml等,初始入门爬虫的话,可以学习一下requests和bs4(BeautifulSoup)这2个库,比较简单,也易学习,requests用于请求页面,BeautifulSoup用于解析页面,下面我以这2个库为基础,简单介绍一下Python如何爬取网页静态数据和网页动态数据,实验环境win10+python3.6+pycharm5.0,主要内容如下:
Python爬取网页静态数据
这个就很简单,直接根据网址请求页面就行,这里以爬取糗事百科上的内容为例:
1.这里假设我们要爬取的文本内容如下,主要包括昵称、内容、好笑数和评论数这4个字段:
打开网页源码,对应网页结构如下,很简单,所有字段内容都可以直接找到:
2.针对以上网页结构,我们就可以编写相关代码来爬取网页数据了,很简单,先根据url地址,利用requests请求页面,然后再利用BeautifulSoup解析数据(根据标签和属性定位)就行,如下:
程序运行截图如下,已经成功爬取到数据:
Python爬取网页动态数据
很多种情况下,网页数据都是动态加载的,直接爬取网页是提取不到任何数据的,这时就需要抓包分析,找到动态加载的数据,一般情况下就是一个json文件(当然,也可能是其他类型的文件,像xml等),然后请求解析这个json文件,就能获取到我们需要的数据,这里以爬取人人贷上面的散标数据为例:
1.这里假设我们爬取的数据如下,主要包括年利率,借款标题,期限,金额,进度这5个字段:
2.按F12调出开发者工具,依次点击“Network”->“XHR”,F5刷新页面,就可以找到动态加载的json文件,具体信息如下:
3.接着,针对以上抓包分析,我们就可以编写相关代码来爬取数据了,基本思路和上面的静态网页差不多,先利用requests请求json,然后再利用python自带的json包解析数据就行,如下:
程序运行截图如下,已经成功获取到数据:
至此,我们就完成了利用python来爬取网页数据。总的来说,整个过程很简单,requests和BeautifulSoup对于初学者来说,非常容易学习,也易掌握,可以学习使用一下,后期熟悉后,可以学习一下scrapy爬虫框架,可以明显提高开发效率,非常不错,当然,网页中要是有加密、验证码等,这个就需要自己好好琢磨,研究对策了,网上也有相关教程和资料,感兴趣的话,可以搜一下,希望以上分享的内容能对你上有所帮助吧,也欢迎大家评论、留言。
下面说明知乎爬虫的源码和涉及主要技术点:(1)程序package组织
(2)模拟登录(爬虫主要技术点1)
要爬去需要登录的网站数据,模拟登录是必要可少的一步,而且往往是难点。知乎爬虫的模拟登录可以做一个很好的案例。要实现一个网站的模拟登录,需要两大步骤是:(1)对登录的请求过程进行分析,找到登录的关键请求和步骤,分析工具可以有IE自带(快捷键F12)、Fiddler、HttpWatcher;(2)编写代码模拟登录的过程。
(3)网页下载(爬虫主要技术点2)
模拟登录后,便可下载目标网页html了。知乎爬虫基于HttpClient写了一个网络连接线程池,并且封装了常用的get和post两种网页下载的方法。
(4)自动获取网页编码(爬虫主要技术点3)
自动获取网页编码是确保下载网页html不出现乱码的前提。知乎爬虫中提供方法可以解决绝大部分乱码下载网页乱码问题。
(5)网页解析和提取(爬虫主要技术点4)
使用Java写爬虫,常见的网页解析和提取方法有两种:利用开源Jar包Jsoup和正则。一般来说,Jsoup就可以解决问题,极少出现Jsoup不能解析和提取的情况。Jsoup强大功能,使得解析和提取异常简单。知乎爬虫采用的就是Jsoup。
(6)正则匹配与提取(爬虫主要技术点5)
虽然知乎爬虫采用Jsoup来进行网页解析,但是仍然封装了正则匹配与提取数据的方法,因为正则还可以做其他的事情,如在知乎爬虫中使用正则来进行url地址的过滤和判断。
(7)数据去重(爬虫主要技术点6)
对于爬虫,根据场景不同,可以有不同的去重方案。(1)少量数据,比如几万或者十几万条的情况,使用Map或Set便可;(2)中量数据,比如几百万或者上千万,使用BloomFilter(著名的布隆过滤器)可以解决;(3)大量数据,上亿或者几十亿,Redis可以解决。知乎爬虫给出了BloomFilter的实现,但是采用的Redis进行去重。
(8)设计模式等Java高级编程实践
除了以上爬虫主要的技术点之外,知乎爬虫的实现还涉及多种设计模式,主要有链模式、单例模式、组合模式等,同时还使用了Java反射。除了学习爬虫技术,这对学习设计模式和Java反射机制也是一个不错的案例。
4. 一些抓取结果展示
这里以python为例,简单介绍一下如何通过python网络爬虫获取网站数据,主要分为静态网页数据的爬取和动态网页数据的爬取,实验环境win10+python3.6+pycharm5.0,主要内容如下:
静态网页数据
这里的数据都嵌套在网页源码中,所以直接requests网页源码进行解析就行,下面我简单介绍一下,这里以爬取糗事百科上的数据为例:
1.首先,打开原网页,如下,这里假设要爬取的字段包括昵称、内容、好笑数和评论数:
接着查看网页源码,如下,可以看的出来,所有的数据都嵌套在网页中:
2.然后针对以上网页结构,我们就可以直接编写爬虫代码,解析网页并提取出我们需要的数据了,测试代码如下,非常简单,主要用到requests+BeautifulSoup组合,其中requests用于获取网页源码,BeautifulSoup用于解析网页提取数据:
点击运行这个程序,效果如下,已经成功爬取了到我们需要的数据:
动态网页数据
这里的数据都没有在网页源码中(所以直接请求页面是获取不到任何数据的),大部分情况下都是存储在一个json文件中,只有在网页更新的时候,才会加载数据,下面我简单介绍一下这种方式,这里以爬取人人贷上面的数据为例:
1.首先,打开原网页,如下,这里假设要爬取的数据包括年利率,借款标题,期限,金额和进度:
接着按F12调出开发者工具,依次点击“Network”->“XHR”,F5刷新页面,就可以找打动态加载的json文件,如下,也就是我们需要爬取的数据:
2.然后就是根据这个json文件编写对应代码解析出我们需要的字段信息,测试代码如下,也非常简单,主要用到requests+json组合,其中requests用于请求json文件,json用于解析json文件提取数据:
点击运行这个程序,效果如下,已经成功爬取到我们需要的数据:
至此,我们就完成了利用python网络爬虫来获取网站数据。总的来说,整个过程非常简单,python内置了许多网络爬虫包和框架(scrapy等),可以快速获取网站数据,非常适合初学者学习和掌握,只要你有一定的爬虫基础,熟悉一下上面的流程和代码,很快就能掌握的,当然,你也可以使用现成的爬虫软件,像八爪鱼、后羿等也都可以,网上也有相关教程和资料,非常丰富,感兴趣的话,可以搜一下,希望以上分享的内容能对你有所帮助吧,也欢迎大家评论、留言进行补充。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)