【python爬虫案例】利用python爬取豆瓣读书评分TOP250排行数据

news/2024/11/15 15:50:56/文章来源:https://www.cnblogs.com/wangnp/p/18412477

一、爬取案例-豆瓣读书TOP250

上一期给大家分享了个python爬虫案例:豆瓣电影TOP250的排行榜数据爬取

【python爬虫案例】利用python爬虫爬取豆瓣电影评分TOP250排行数据!

今天再给大家分享一下:豆瓣读书排行榜TOP250的python爬虫案例!

因为是同一个网站,所以流程和逻辑上都是差不多的。

这次爬取的目标网址是:https://book.douban.com/top250

老规矩!咱们以目标为驱动,以兴趣为导向,先来看下爬虫程序运行后得到的excel文档数据

那代码是如何实现豆瓣读书TOP250数据爬取的了?下面逐一讲解一下python实现。

二、豆瓣读书TOP250网站分析

通过浏览器F12查看所有请求,发现他并没有发送ajax请求,那说明我们要的TOP250的排行榜数据大概率是在html页面内容上。

于是我们 点击右键->查看网页源代码 ,发现我们需要的豆瓣读书评分的排行榜数据都在html页面里

这就简单了,我们直接往下看,上代码。

三、python爬虫代码详解

首先,导入我们需要用到的库

import requests     # 发请求
from lxml import etree  # 解析html
import pandas as pd  # 存取csv

然后,向豆瓣读书TOP250的网页发起请求,获得html页面内容

page_source = requests.get(page_url, headers=headers).text

用lxml库解析html页面

tree = etree.HTML(page_source)

使用xpath来提取我们需要的书籍排行榜数据内容

# 获得数据
tables = tree.xpath('//div[@id="content"]/div/div[1]/div/table')for table in tables:top = table.xpath(".//td[@valign='top']")[-1]# 书名book_name = extract_first(top.xpath("./div/a/text()")).strip()# 豆瓣链接url = extract_first(top.xpath("./div/a/@href")).strip()# 作者、译者、出版社、出版日期、价格info = extract_first(top.xpath("./p[@class='pl']/text()")).strip()# 评分score = extract_first(top.xpath("./div[@class='star clearfix']/span[@class='rating_nums']/text()")).strip()# 评分人数star_people = extract_first(top.xpath("./div[@class='star clearfix']/span[@class='pl']/text()")).strip()star_people_num = re.search("\d+", star_people).group()# 一句话评价one_evaluate = extract_first(top.xpath("./p[@class='quote']/span/text()")).strip()

其中,需要特殊说明的是,上面的info变量。

他里面会包含:作者、译者、出版社、出版日期、价格等信息,提取的时候会有多种格式。

为了应对书籍信息中列表的不同长度,所以会有如下应对不同格式的处理代码

infos = info.split("/")
if len(infos) == 5:author = infos[0]translator = infos[1]publish = infos[2]publish_date = infos[3]price = infos[4]
elif len(infos) == 4:author = infos[0]publish = infos[1]publish_date = infos[2]price = infos[3]
elif len(infos) == 6 :  # 有2个价格 第1页:福尔摩斯探案全集author = infos[0]translator = infos[1]publish = infos[2]publish_date = infos[3]price = str(infos[4]) + "/" + str(infos[5])
elif len(infos) == 3:    # 没有作者,且没有译者 第5页:十万个为什么publish = infos[0]publish_date = infos[1]price = infos[2]
else:print(f"未匹配到的格式 书名={book_name}", infos)

最后,我们将爬虫爬取的数据保存到csv文档里

def save_to_csv(csv_name):"""数据保存到csv@param csv_name: csv文件名字@return:"""df = pd.DataFrame()  # 初始化一个DataFrame对象df['书名'] = book_namesdf['豆瓣链接'] = book_urlsdf['作者'] = authorsdf['译者'] = translatorsdf['出版社'] = publishersdf['出版日期'] = publish_datesdf['价格'] = pricesdf['评分'] = scoresdf['评分人数'] = star_peoplesdf['一句话评价'] = one_evaluatesdf.to_csv(csv_name, encoding='utf8')  # 将数据保存到csv文件

上面的book_names、book_urls等变量都是使用的list来进行存储的,这样才能符合pandas导出数据时的需要,最后调用to_csv()方法即可导出豆瓣读书的排行榜数据到文档里了。

三、python爬虫源代码获取

我是 @王哪跑,持续分享python干货,各类副业软件!
附完整python源码及数据:【python爬虫案例】利用python爬虫爬取豆瓣读书评分TOP250排行数据!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/800602.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多语言长文本 AI 关键字提取 API 数据接口

多语言长文本 AI 关键字提取 API 数据接口 AI / 文本 专有模型极速提取 多语言长文本 / 实时语料库。1. 产品功能支持长文本关键词提取; 多语言关键词识别; 基于 AI 模型,提取精准关键词; 全接口支持 HTTPS(TLS v1.0 / v1.1 / v1.2 / v1.3); 全面兼容 Apple ATS; 全国多…

【Swagger】3.Swagger2的权限控制

想找Swagger的登录认证方式。这里是Swagger2的方式。登录安全控制 Basic身份认证 ApiKey身份认证登录安全控制 Basic身份认证ApiKey身份认证 有志者,事竟成,破釜沉舟,百二秦关终属楚; 苦心人,天不负,卧薪尝胆,三千越甲可吞吴。

Oracle 19C重启库后警告日志报错ORA-12012ORA-27476: SYS.MAX_JOB_SLAVE_PROCESSES does not exist

Oracle 19C重启库后警告日志报错ORA-12012&&ORA-27476: "SYS"."MAX_JOB_SLAVE_PROCESSES" does not exist某次测试机器的19c重启后突然在警告日志定时冒出如下类似的报错:2024-09-20T15:20:00.170202+08:00 TESTDB(7):Errors in file /u01/app/or…

【Swagger】2.不在生产环境暴露,可以修改默认地址

不对外暴露接口 一般来说,接口给内部人员使用和测试的,不对生产环境暴露。此时应该如何设置呢?可以在Swagger配置文件中添加注解:@Profile({"环境名称1","环境名称2"} 或@Profile("环境名称") 这里,注解中不添加生产环境。 此时,开发环境和…

SMT丨工艺特点及详细生产工艺流程

SMT丨工艺特点及详细生产工艺流程 表面组装技术SMT现状 SMT是目前电子组装行业里最流行的一种技术和工艺。自70年代初推向市场以来,SMT已逐渐替代传统"人工插件"的波峰焊组装方式,已成为现代电子组装产业的主流,人们称为电子组装技术的第二次革命。在国际上,这种…

【Swagger】2.——不在生产环境暴露,可以修改默认地址

不对外暴露接口 一般来说,接口给内部人员使用和测试的,不对生产环境暴露。此时应该如何设置呢?可以在Swagger配置文件中添加注解:@Profile({"环境名称1","环境名称2"} 或@Profile("环境名称") 这里,注解中不添加生产环境。 此时,开发环境和…

文件上传漏洞思路详解

1. 文件上传漏洞简介 1.1 什么是文件上传漏洞 文件上传漏洞是一种常见的Web应用程序漏洞,攻击者可以通过向目标服务器上传恶意文件来实现攻击目的。这类漏洞的产生通常是因为服务器没有对用户上传的文件进行充分的安全检查和验证。 1.2 文件上传漏洞有哪些危害 1. 恶意代码执行…

信息学奥赛初赛天天练-93-CSP-S2023阅读程序3-sort排序、同底对数求和、二分查找、二分答案

2023 CSP-S 阅读程序2 判断题正确填 √,错误填 ⨉ ;除特殊说明外,判断题 1.5 分,选择题 3 分,共计 40 分) 01 #include <vector> 02 #include <algorithm> 03 #include <iostream> 04 05 using namespace std; 06 07 bool f0(vector<int> &a…

缓存

Django4中的缓存 详细文档参考:https://www.cnblogs.com/Neeo/articles/17589834.html Django支持的缓存有好几种:三方的Redis(推荐),Memcached(不推荐) 缓存到本地文件 缓存到本地数据库 缓存到内存里 虚拟缓存缓存的粒度 局部视图缓存 缓存指定的视图函数,有两种写法.在视…

VSCode 定义代码模板

在使用编写代码的过程中,经常会写一些固定代码段。 以 Java 为例,定义实体类时一般都会编写序列化版本号: @Serial private static final long serialVersionUID = 1L;这段代码是固定写法,基本不会变,如果每次都手写的话,就比较繁琐了。 VSCode 提供了生成代码段的功能,…

轻松部署!龙蜥操作系统安装Zabbix7.0详细教程

龙蜥操作系统(Anolis OS)作为龙蜥社区发行的开源Linux发行版,以其稳定、高性能、安全、可靠和100%兼容CentOS 8软件生态的特点,成为众多企业和开发者的首选操作系统。它不仅支持多计算架构,如X86、ARM、RISC-V等,还针对云端场景进行了优化,为云上典型场景带来显著的性能…

WPF 隐藏listview控件的滚动条

两种方式:需要自行验证,对控件,那个有效,那个没效对于不可控的事情,保持乐观; 对于可控的事情,保持谨慎