爬虫python书籍-Python爬虫案例:抓取豆瓣编程类高评分书籍
对于很多正在学习计算机的朋友来说,选择合适的学习材料是非常重要的。
本文将通过 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爬虫案例:抓取豆瓣编程类高评分书籍相关推荐
- python简单爬虫(下):实战应用——抓取豆瓣同城、登陆图书馆查询图书归还
在掌握了urllib几个模块的相关用法后,接下来就是进入实战步骤了~ (一)抓取豆瓣网站同城活动 豆瓣北京同城活动 该链接指向豆瓣同城活动的列表,向该链接发起request: # encoding= ...
- Project 2 :Python爬虫源码实现抓取豆瓣电影爱情电影Top200并保存到文件
基于python3.6-pycharm编写的,都已经调试过了,欢迎大家提出交流意见. 关于一些基础的数据网页分析(比如为什么是这个url)没有过多赘述,看不懂的自行百度. 源码可以直接拷贝运行. 转载 ...
- python异步协程,抓取豆瓣top250电影海报。
# 利用正则及异步协程 爬取豆瓣top250电影图片 # author:xyislove # 欢迎各位大神修改指导 from asyncio import tasks import re from f ...
- [Python从零到壹] 四.网络爬虫之入门基础及正则表达式抓取博客案例
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- c#使用正则表达式获取TR中的多个TD_[Python从零到壹] 四.网络爬虫之入门基础及正则表达式抓取博客案例...
首先祝大家中秋节和国庆节快乐,欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都 ...
- 编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
这篇文章主要介绍了编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法,用到了Python的urllib和urllib2模块,需要的朋友可以参考下 抓取豆瓣电影TOP100 一.分析豆瓣top ...
- python爬取新浪微博数据中心_Python爬虫框架Scrapy实战之批量抓取招聘信息
网络爬虫抓取特定网站网页的html数据,但是一个网站有上千上万条数据,我们不可能知道网站网页的url地址,所以,要有个技巧去抓取网站的所有html页面.Scrapy是纯Python实现的爬虫框架,用户 ...
- python爬取app播放的视频,Python爬虫工程师必学——App数据抓取实战视频教程
爬虫分为几大方向,WEB网页数据抓取.APP数据抓取.软件系统数据抓取.本课程主要为同学讲解如何用python实现App数据抓取,课程从开发环境搭建,App爬虫必备利器详解,项目实战,到最后的多App ...
- Python爬虫 | 斗图网表情包抓取
Python爬虫 | 斗图网表情包抓取 1.数据来源分析 2.制作div_list 3.发起请求 4.保存图片 5.批量获取 6.完整代码 声明 1.数据来源分析 打开斗图吧的主页,发现网址非常有 ...
最新文章
- styleable cannot be resolved or is not a field
- step by step设置postgresql用户密码并配置远程连接
- 基于python技术的自动化运维是干嘛的_如何理解Python与自动化运维的关系。?
- Spring框架学习3:bean元素属性
- 华为客户端优化建议(应用保活相关)
- 【何之源-21个项目玩转深度学习】——Chapter3-3.2 数据准备-将图像数据转为tfrecord形式
- STC学习:导航按键
- php 读取js文件,JS中如何读取文件
- 提升手机麦克风音量_【奇酷小技巧】教你无需ROOT增大话筒、听筒和外放声音!...
- 工商银行在线支付接口
- 【数值计算方法】学习笔记
- Elasticsearch 7.7.0 高阶篇-聚合技术
- android 适配俄语添加,【技术贴】怎么在手机上添加俄语输入法?,怎样在电脑上打俄语重音?...
- 定时删除虚拟服务器快照,ESXi6.0 设置自动删除快照脚本及计划任务
- 2017中国云计算评测报告 1
- 华为鸿蒙17日,华为又有大动作,于10月17日发布全新系列手机,或将采用鸿蒙系统...
- 杨贵妃深受日本人喜爱 供奉为“热田大明神”
- 《区块链技术与应用》读书笔记
- Set 直接转成 数组
- ubuntu python opencv 实用小技巧小结
热门文章
- Retrofit2.0 请求数据 一直出返回网络错误,错误代码 414
- 开发日记-20190619 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》
- 开发日记-20190521 关键词 bash的几个初始化文件
- Intel DAAL AI加速——支持从数据预处理到模型预测,数据源必须使用DAAL的底层封装库...
- MAP 最大后验——利用经验数据获得对未观测量的点态估计
- 查看tensorflow pb模型文件的节点信息
- iostat相关参数说明——await:平均每次设备I/O操作的等待时间 (毫秒),如果%util接近 100%,说明产生的I/O请求太多...
- umi搭建react+antd项目(二)路由
- Eclipse构建路径
- iframe父页面获取iframe子页面的元素 与 iframe子页面获取父页面元素