资讯专栏INFORMATION COLUMN

Python爬虫案例:抓取豆瓣编程类高评分书籍

SunZhaopeng / 1916人阅读

摘要:本文将通过来爬取豆瓣编程类评分大于的书籍。下图是最终的结果下面进入正题一采集源分析首先我们找到豆瓣的编程类书籍网址编程进入网址之后我们翻到最下面的分页导航通过分析分页地址我们可以得出偏移量这个地址则是我们要采集的内容。

对于很多正在学习计算机的朋友来说,选择合适的学习材料是非常重要的。
本文将通过 Python 来爬取豆瓣编程类评分大于 9.0 的书籍。
此案例很适合入门爬虫的朋友学习,总共也就 3 个函数。

下图是最终的结果:

下面进入正题:
一、采集源分析:

首先我们找到豆瓣的编程类书籍网址:

https://book.douban.com/tag/编程

进入网址之后我们翻到最下面的分页导航:

通过分析分页地址我们可以得出:

https://book.douban.com/tag/%...{偏移量}&type=T

这个地址则是我们要采集的内容。第一页 start = 0,第二页 start = 20 ... 以此类推。

找到了要采集的 URL 之后,接下来就是分析我们真正需要的数据在 HTML 文档中的位置。

F12 打开控制台发现,这些 li 标签正是我们的目标内容。

书名、评论、评分分别对应li 下面的 h2 标签、class 为 rating_nums 的 span 标签, class 为 pl 的 span 标签。

见下图:

有了以上内容,那么我们很容易就有了思路:

抓取页面上所有的 li 标签

循环处理这里 li 标签,找到我们所需的三个内容,并存储到列表中

根据评分排序

保存数据到 csv

二、依赖的包:

除了上次使用到的 requests, BeautifulSoup, 还增加了几个包。

re 正则表达式处理

numpy 很强大的数据处理库,因为本文要进行排序,所以使用这个包会很方便

csv 用于把最终的结果保存到csv中

time 这里主要用到了 sleep 功能

三、编码

首先我们定义一个 get 函数,接受一个页码,表示要爬取到多少页。

这个函数的主要功能就是抓取指定页码所有的书的信息,包括书名、评分、评论数。并且保存到一个二维数组中。



代码解读:

因为豆瓣的分页是根据 URL 中的 start 参数(相当于偏移量)来分的,所以在刚开始定义了一个 offset 变量,根据我们传入的页码来计算正确的 start 参数的值。

后面通过 find_all 方法获取所有的 li 对象,存入 book_info_list 列表中,那么接下来就是遍历这个列表,从每一个元素中得到 star、 title、comment 三个变量。最终得到一个二维数组 result。

定义排序方法,接收上面得出的 result 变量,并且将这个列表根据评分来排序。

将最终排好的数据写入 csv 中。

四、总结

以上则是我们爬取豆瓣的小案例,有经验的朋友们会发现这个案例有很大的不足之处。

在运行这个程序的时候,我们会发现会非常缓慢。原因就是每次请求豆瓣的分页 URl 之后,接下来紧跟着一条龙的获取书名等操作,获取完这个页面的所有数据之后再接着抓取下一个分页页面。也就是完全同步的编码方式。所以慢是必然的。

那么如何调整代码结构才能使程序运行迅速呢?

这里介绍一个简单又常用的方法:

我们可以采用多线程技术,python 的 threading 包是专门用于多线程处理的。采用这种方式又多增加了两个包:

threading

queue

可以将上述代码的下载分页 URL 部分代码放入一个多带带的线程去跑,并将下载好的 HTML 文档存入一个队列中。然后多开几个线程去队列中读取数据,并用 BS4 来分析,将分析得到的 list 数据结构追加到外部的另一个list 中。最后再去排序这另一个列表。

获取源码请到:“ 后端漫谈 ” 公众号后台回复 “douban”。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42586.html

相关文章

  • 2018电影票房分析-谁才是票房之王

    摘要:另外由于豆瓣上一些电影评分数量太少而不显示,所以这里的电影数量会和票房数量有所差异。月度票房将类型片的票房按月划分,得到了这张图。 去年末的时候,我招收了新的 实训生 。本文是其中一位 @齐大圣 同学在实训两个月时完成的项目案例。(码上行动群里同学应该都看过这个名字,现在也是助教之一。)项目最初的想法是, 从互联网上的公开信息中采集2018年在国内上映电影的票房、评分、类型、演员等信息...

    stormjun 评论0 收藏0
  • 23个Python爬虫开源项目代码,包含微信、淘宝、豆瓣、知乎、微博等

    摘要:今天为大家整理了个爬虫项目。地址新浪微博爬虫主要爬取新浪微博用户的个人信息微博信息粉丝和关注。代码获取新浪微博进行登录,可通过多账号登录来防止新浪的反扒。涵盖链家爬虫一文的全部代码,包括链家模拟登录代码。支持微博知乎豆瓣。 showImg(https://segmentfault.com/img/remote/1460000018452185?w=1000&h=667); 今天为大家整...

    jlanglang 评论0 收藏0
  • Java学习必备书籍推荐终极版!

    摘要:实战高并发程序设计推荐豆瓣评分书的质量没的说,推荐大家好好看一下。推荐,豆瓣评分,人评价本书介绍了在编程中条极具实用价值的经验规则,这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案。 很早就想把JavaGuide的书单更新一下了,昨晚加今天早上花了几个时间对之前的书单进行了分类和补充完善。虽是终极版,但一定还有很多不错的 Java 书籍我没有添加进去,会继续完善下去。希望这篇...

    Steve_Wang_ 评论0 收藏0
  • 爬虫学习之基于 Scrapy 的爬虫自动登录

    摘要:概述在前面两篇爬虫学习之基于的网络爬虫和爬虫学习之简单的网络爬虫文章中我们通过两个实际的案例,采用不同的方式进行了内容提取。 概述 在前面两篇(爬虫学习之基于Scrapy的网络爬虫和爬虫学习之简单的网络爬虫)文章中我们通过两个实际的案例,采用不同的方式进行了内容提取。我们对网络爬虫有了一个比较初级的认识,只要发起请求获取响应的网页内容,然后对内容进行格式化存储。很多时候我们抓取到的内容...

    Panda 评论0 收藏0

发表评论

0条评论

SunZhaopeng

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<