澳门银河电子

首页 > 正文

Python 爬虫新手教程:抓取中国顶级编程网站上的优质文章

www.btsolar.com2019-08-08
?

  首先浏览器输入 https://www.oschina.net/ 进入开源中国官网,点击顶部导航栏的 “博客” 选项进入博客列表页面,之后点击左侧 “服务端开发与管理” 选项,我们要爬取的是服务端相关的文章

  如下图所示:

  

  

  ?>大家在学python的时候肯定会遇到很多难题,以及对于新技术的追求,这里推荐一下我们的Python学习扣qun:784758214,这里是python学习者聚集地!!同时,自己是一名高级python开发工程师,从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!每日分享一些学习的方法和需要注意的小细节

  接下来分析文章列表的布局方式,按 F12 打开调试页面,如下所示:

  

  

  ?

  可以看到,一篇文章的相关信息就是一个 div, class 属性为 item blog-item,打开该 div,如下:

  

  

  ?

  我们要抓取的是文章的标题,描述,URL,和阅读数,标题和URL可以通过 a 标签来获取,描述通过 来获取,而阅读数则要麻烦些,是第三个

  通过以下代码就可以获取到以上到相关信息:

  

  上述代码就是主要的获取相关信息的逻辑,因为阅读数没有唯一id,或者 class ,所有可以通过 find_next_sibling 来获取兄弟节点;

  接下来就对获取到到文章进行处理,如按照阅读数大于等于1000过滤文章,并按照阅读数从高到低低排序,并且写到文件中:

  首先要定义一个文章类,用来表示文章的相关信息,如下:

  

  之后,定义文章的处理类 OschinaArticle ,相关处理逻辑在该类中实现:

  

  接下来获取 BeautifulSoup 对象:

  

  之后,通过 BeautifulSoup 来解析 HTML 页面,获取文章相关信息,之后,根据相关信息创建文章对象,放到集合中进行返回:

  

  因为文章的阅读数如果超过 1000 的话,就用 K 来表示,为了在后面筛选指定阅读数的文章,所以需要进行处理,把 K 转换为 1000,代码如下:

  

  接下来就是文章根据阅读数进行筛选和排序了,筛选出阅读数大于等于指定值并且按照阅读数从高到低排序,代码如下:

  

  以上就可以获取到我们想要的文章信息了,此外,我们可以把信息写到文件文件中,代码如下:

  

  之后,把上面的方法整合在一起,代码如下:

  

  main 方法测试一下,地址输入:

  https://www.oschina.net/blog?classification=428640, 文章阅读数要大于等于1000

  

  控制台日志打印如下:

  

  

  ?

  写入到文件中的内容如下:

  

  

  ?

  你以为到这里就完了吗,no, no, no.............,通过上述方式只能获取到首页的文章,如果想获取更多的文章怎么办?开源中国的博客文章列表没有分页,是通过滑动鼠标滚轮来获取更多的页,可是人家的地址导航栏却没有丝毫没有变动,但是可以通过 F12 来看呀,按 F12 后,通过 NetWork 来查看相关的请求和响应情况:

  

  

  ?

  通过滚动几下鼠标滚轮之后,可以发现请求的 URL 还是有规律的:

  https://www.oschina.net/blog/widgets/_blog_index_recommend_list?classification=428640&p=2&type=ajax

  https://www.oschina.net/blog/widgets/_blog_index_recommend_list?classification=428640&p=2&type=ajax

  https://www.oschina.net/blog/widgets/_blog_index_recommend_list?classification=428640&p=3&type=ajax

  https://www.oschina.net/blog/widgets/_blog_index_recommend_list?classification=428640&p=4&type=ajax

  https://www.oschina.net/blog/widgets/_blog_index_recommend_list?classification=428640&p=5&type=ajax

  可以看到除了 p 的参数值不同的话,其他的都相同,p 就是分页标识,p=2就表示第二页,p=3就等于第三页,以此类推,就可以获取到更多的文章啦:

  

  测试:

  

  日志控制台打印如下:

  

  

  ?

  写到文件中如下:

  

  

  ?

  可以看到,在 1-20 页中,阅读数大于等 1000 的文章有 114 篇,之后就可以 copy URL 到地址栏进行阅读啦....................

  完整代码如下:

  OschinaArticle 处理逻辑类:

  96

  IT白鸽

  2019.08.03 14:13

  字数 1216

  首先浏览器输入 https://www.oschina.net/ 进入开源中国官网,点击顶部导航栏的 “博客” 选项进入博客列表页面,之后点击左侧 “服务端开发与管理” 选项,我们要爬取的是服务端相关的文章

  如下图所示:

  

  

  ?>大家在学python的时候肯定会遇到很多难题,以及对于新技术的追求,这里推荐一下我们的Python学习扣qun:784758214,这里是python学习者聚集地!!同时,自己是一名高级python开发工程师,从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!每日分享一些学习的方法和需要注意的小细节

  接下来分析文章列表的布局方式,按 F12 打开调试页面,如下所示:

  

  

  ?

  可以看到,一篇文章的相关信息就是一个 div, class 属性为 item blog-item,打开该 div,如下:

  

  

  ?

  我们要抓取的是文章的标题,描述,URL,和阅读数,标题和URL可以通过 a 标签来获取,描述通过 来获取,而阅读数则要麻烦些,是第三个

  通过以下代码就可以获取到以上到相关信息:

  

  上述代码就是主要的获取相关信息的逻辑,因为阅读数没有唯一id,或者 class ,所有可以通过 find_next_sibling 来获取兄弟节点;

  接下来就对获取到到文章进行处理,如按照阅读数大于等于1000过滤文章,并按照阅读数从高到低低排序,并且写到文件中:

  首先要定义一个文章类,用来表示文章的相关信息,如下:

  

  之后,定义文章的处理类 OschinaArticle ,相关处理逻辑在该类中实现:

  

  接下来获取 BeautifulSoup 对象:

  

  之后,通过 BeautifulSoup 来解析 HTML 页面,获取文章相关信息,之后,根据相关信息创建文章对象,放到集合中进行返回:

  

  因为文章的阅读数如果超过 1000 的话,就用 K 来表示,为了在后面筛选指定阅读数的文章,所以需要进行处理,把 K 转换为 1000,代码如下:

  

  接下来就是文章根据阅读数进行筛选和排序了,筛选出阅读数大于等于指定值并且按照阅读数从高到低排序,代码如下:

  

  以上就可以获取到我们想要的文章信息了,此外,我们可以把信息写到文件文件中,代码如下:

  

  之后,把上面的方法整合在一起,代码如下:

  

  main 方法测试一下,地址输入:

  https://www.oschina.net/blog?classification=428640, 文章阅读数要大于等于1000

  

  控制台日志打印如下:

  

  

  ?

  写入到文件中的内容如下:

  

  

  ?

  你以为到这里就完了吗,no, no, no.............,通过上述方式只能获取到首页的文章,如果想获取更多的文章怎么办?开源中国的博客文章列表没有分页,是通过滑动鼠标滚轮来获取更多的页,可是人家的地址导航栏却没有丝毫没有变动,但是可以通过 F12 来看呀,按 F12 后,通过 NetWork 来查看相关的请求和响应情况:

  

  

  ?

  通过滚动几下鼠标滚轮之后,可以发现请求的 URL 还是有规律的:

  https://www.oschina.net/blog/widgets/_blog_index_recommend_list?classification=428640&p=2&type=ajax

  https://www.oschina.net/blog/widgets/_blog_index_recommend_list?classification=428640&p=2&type=ajax

  https://www.oschina.net/blog/widgets/_blog_index_recommend_list?classification=428640&p=3&type=ajax

  https://www.oschina.net/blog/widgets/_blog_index_recommend_list?classification=428640&p=4&type=ajax

  https://www.oschina.net/blog/widgets/_blog_index_recommend_list?classification=428640&p=5&type=ajax

  可以看到除了 p 的参数值不同的话,其他的都相同,p 就是分页标识,p=2就表示第二页,p=3就等于第三页,以此类推,就可以获取到更多的文章啦:

  

  测试:

  

  日志控制台打印如下:

  

  

  ?

  写到文件中如下:

  

  

  ?

  可以看到,在 1-20 页中,阅读数大于等 1000 的文章有 114 篇,之后就可以 copy URL 到地址栏进行阅读啦....................

  完整代码如下:

  OschinaArticle 处理逻辑类:

  首先浏览器输入 https://www.oschina.net/ 进入开源中国官网,点击顶部导航栏的 “博客” 选项进入博客列表页面,之后点击左侧 “服务端开发与管理” 选项,我们要爬取的是服务端相关的文章

  如下图所示:

  

  

  ?>大家在学python的时候肯定会遇到很多难题,以及对于新技术的追求,这里推荐一下我们的Python学习扣qun:784758214,这里是python学习者聚集地!!同时,自己是一名高级python开发工程师,从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!每日分享一些学习的方法和需要注意的小细节

  接下来分析文章列表的布局方式,按 F12 打开调试页面,如下所示:

  

  

  ?

  可以看到,一篇文章的相关信息就是一个 div, class 属性为 item blog-item,打开该 div,如下:

  

  

  ?

  我们要抓取的是文章的标题,描述,URL,和阅读数,标题和URL可以通过 a 标签来获取,描述通过 来获取,而阅读数则要麻烦些,是第三个

  通过以下代码就可以获取到以上到相关信息:

  

  上述代码就是主要的获取相关信息的逻辑,因为阅读数没有唯一id,或者 class ,所有可以通过 find_next_sibling 来获取兄弟节点;

  接下来就对获取到到文章进行处理,如按照阅读数大于等于1000过滤文章,并按照阅读数从高到低低排序,并且写到文件中:

  首先要定义一个文章类,用来表示文章的相关信息,如下:

  

  之后,定义文章的处理类 OschinaArticle ,相关处理逻辑在该类中实现:

  

  接下来获取 BeautifulSoup 对象:

  

  之后,通过 BeautifulSoup 来解析 HTML 页面,获取文章相关信息,之后,根据相关信息创建文章对象,放到集合中进行返回:

  

  因为文章的阅读数如果超过 1000 的话,就用 K 来表示,为了在后面筛选指定阅读数的文章,所以需要进行处理,把 K 转换为 1000,代码如下:

  

  接下来就是文章根据阅读数进行筛选和排序了,筛选出阅读数大于等于指定值并且按照阅读数从高到低排序,代码如下:

  

  以上就可以获取到我们想要的文章信息了,此外,我们可以把信息写到文件文件中,代码如下:

  

  之后,把上面的方法整合在一起,代码如下:

  

  main 方法测试一下,地址输入:

  https://www.oschina.net/blog?classification=428640, 文章阅读数要大于等于1000

  

  控制台日志打印如下:

  

  

  ?

  写入到文件中的内容如下:

  

  

  ?

  你以为到这里就完了吗,no, no, no.............,通过上述方式只能获取到首页的文章,如果想获取更多的文章怎么办?开源中国的博客文章列表没有分页,是通过滑动鼠标滚轮来获取更多的页,可是人家的地址导航栏却没有丝毫没有变动,但是可以通过 F12 来看呀,按 F12 后,通过 NetWork 来查看相关的请求和响应情况:

  

  

  ?

  通过滚动几下鼠标滚轮之后,可以发现请求的 URL 还是有规律的:

  https://www.oschina.net/blog/widgets/_blog_index_recommend_list?classification=428640&p=2&type=ajax

  https://www.oschina.net/blog/widgets/_blog_index_recommend_list?classification=428640&p=2&type=ajax

  https://www.oschina.net/blog/widgets/_blog_index_recommend_list?classification=428640&p=3&type=ajax

  https://www.oschina.net/blog/widgets/_blog_index_recommend_list?classification=428640&p=4&type=ajax

  https://www.oschina.net/blog/widgets/_blog_index_recommend_list?classification=428640&p=5&type=ajax

  可以看到除了 p 的参数值不同的话,其他的都相同,p 就是分页标识,p=2就表示第二页,p=3就等于第三页,以此类推,就可以获取到更多的文章啦:

  

  测试:

  

  日志控制台打印如下:

  

  

  ?

  写到文件中如下:

  

  

  ?

  可以看到,在 1-20 页中,阅读数大于等 1000 的文章有 114 篇,之后就可以 copy URL 到地址栏进行阅读啦....................

  完整代码如下:

  OschinaArticle 处理逻辑类: