对于很多正在学习计算机的朋友来说,选择合适的学习材料是非常重要的。

本文将通过 Python 来爬取豆瓣编程类评分大于 9.0 的书籍。

此案例很适合入门爬虫的朋友学习,总共也就 3 个函数。

下图是最终的结果:

下面进入正题:

一、采集源分析:

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

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

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

这个地址则是我们要采集的内容。第一页 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”。

爬虫python书籍-Python爬虫案例:抓取豆瓣编程类高评分书籍相关推荐

  1. python简单爬虫(下):实战应用——抓取豆瓣同城、登陆图书馆查询图书归还

    在掌握了urllib几个模块的相关用法后,接下来就是进入实战步骤了~ (一)抓取豆瓣网站同城活动 豆瓣北京同城活动  该链接指向豆瓣同城活动的列表,向该链接发起request: # encoding= ...

  2. Project 2 :Python爬虫源码实现抓取豆瓣电影爱情电影Top200并保存到文件

    基于python3.6-pycharm编写的,都已经调试过了,欢迎大家提出交流意见. 关于一些基础的数据网页分析(比如为什么是这个url)没有过多赘述,看不懂的自行百度. 源码可以直接拷贝运行. 转载 ...

  3. python异步协程,抓取豆瓣top250电影海报。

    # 利用正则及异步协程 爬取豆瓣top250电影图片 # author:xyislove # 欢迎各位大神修改指导 from asyncio import tasks import re from f ...

  4. [Python从零到壹] 四.网络爬虫之入门基础及正则表达式抓取博客案例

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  5. c#使用正则表达式获取TR中的多个TD_[Python从零到壹] 四.网络爬虫之入门基础及正则表达式抓取博客案例...

    首先祝大家中秋节和国庆节快乐,欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都 ...

  6. 编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法

    这篇文章主要介绍了编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法,用到了Python的urllib和urllib2模块,需要的朋友可以参考下 抓取豆瓣电影TOP100 一.分析豆瓣top ...

  7. python爬取新浪微博数据中心_Python爬虫框架Scrapy实战之批量抓取招聘信息

    网络爬虫抓取特定网站网页的html数据,但是一个网站有上千上万条数据,我们不可能知道网站网页的url地址,所以,要有个技巧去抓取网站的所有html页面.Scrapy是纯Python实现的爬虫框架,用户 ...

  8. python爬取app播放的视频,Python爬虫工程师必学——App数据抓取实战视频教程

    爬虫分为几大方向,WEB网页数据抓取.APP数据抓取.软件系统数据抓取.本课程主要为同学讲解如何用python实现App数据抓取,课程从开发环境搭建,App爬虫必备利器详解,项目实战,到最后的多App ...

  9. Python爬虫 | 斗图网表情包抓取

    Python爬虫 | 斗图网表情包抓取 1.数据来源分析 2.制作div_list 3.发起请求 4.保存图片 5.批量获取 6.完整代码 声明 1.数据来源分析   打开斗图吧的主页,发现网址非常有 ...

最新文章

  1. styleable cannot be resolved or is not a field
  2. step by step设置postgresql用户密码并配置远程连接
  3. 基于python技术的自动化运维是干嘛的_如何理解Python与自动化运维的关系。?
  4. Spring框架学习3:bean元素属性
  5. 华为客户端优化建议(应用保活相关)
  6. 【何之源-21个项目玩转深度学习】——Chapter3-3.2 数据准备-将图像数据转为tfrecord形式
  7. STC学习:导航按键
  8. php 读取js文件,JS中如何读取文件
  9. 提升手机麦克风音量_【奇酷小技巧】教你无需ROOT增大话筒、听筒和外放声音!...
  10. 工商银行在线支付接口
  11. 【数值计算方法】学习笔记
  12. Elasticsearch 7.7.0 高阶篇-聚合技术
  13. android 适配俄语添加,【技术贴】怎么在手机上添加俄语输入法?,怎样在电脑上打俄语重音?...
  14. 定时删除虚拟服务器快照,ESXi6.0 设置自动删除快照脚本及计划任务
  15. 2017中国云计算评测报告 1
  16. 华为鸿蒙17日,华为又有大动作,于10月17日发布全新系列手机,或将采用鸿蒙系统...
  17. 杨贵妃深受日本人喜爱 供奉为“热田大明神”
  18. 《区块链技术与应用》读书笔记
  19. Set 直接转成 数组
  20. ubuntu python opencv 实用小技巧小结

热门文章

  1. Retrofit2.0 请求数据 一直出返回网络错误,错误代码 414
  2. 开发日记-20190619 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》
  3. 开发日记-20190521 关键词 bash的几个初始化文件
  4. Intel DAAL AI加速——支持从数据预处理到模型预测,数据源必须使用DAAL的底层封装库...
  5. MAP 最大后验——利用经验数据获得对未观测量的点态估计
  6. 查看tensorflow pb模型文件的节点信息
  7. iostat相关参数说明——await:平均每次设备I/O操作的等待时间 (毫秒),如果%util接近 100%,说明产生的I/O请求太多...
  8. umi搭建react+antd项目(二)路由
  9. Eclipse构建路径
  10. iframe父页面获取iframe子页面的元素 与 iframe子页面获取父页面元素