当前位置: 首页 > news >正文

爬取豆瓣书籍数据

# 1. 导入库包
import requests
from lxml import etree
from time import sleep
import os
import pandas as pd
import reBOOKS = []
IMGURLS = []# 2. 获取网页源代码
def get_html(url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'}# 异常处理try:html = requests.get(url, headers=headers)# 声明编码方式html.encoding = html.apparent_encoding# 判断if html.status_code == 200:print('成功获取源代码')# print(html.text)except Exception as e:print('获取源代码失败:%s' % e)# 返回htmlreturn html.text# 3. 解析网页源代码
def parse_html(html):html = etree.HTML(html)# 每个图书信息分别保存在 class="indent" 的div下的 table标签内tables = html.xpath("//div[@class='indent']//table")# print(len(tables))  # 打印之后如果是25的话就是对的books = []imgUrls = []# 遍历通过xpath得到的li标签列表# 因为要获取标题文本,所以xpath表达式要追加 /text(), t.xpath返回的是一个列表,且列表中只有一个元素所以追加一个[0]for t in tables:# title = t.xpath(".//div[@class='p12']/a/@title")  # 匹配得到的是空的# 书名title = t.xpath(".//td[@valign='top']//a/@title")[0]# 链接link = t.xpath(".//td[@valign='top']//a/@href")[0]# 获取pl标签的字符串pl = t.xpath(".//td[@valign='top']//p[1]/text()")[0]# 截取国家if '[' in pl:country = pl.split('[')[1].split(']')[0]else:country = '中'  # 没有国家的默认为“中国”# 截取作者if '[' in pl:author = pl.split(']')[1].split('/')[0].replace(" ", "")elif len(pl.split('/')) == 3:author = '无'elif len(pl.split('/')) == 2:author = pl.split('/')[0]elif '[' not in pl:if len(pl.split('/')) == 4:author = pl.split('/')[-4]elif len(pl.split('/')) == 5:author = pl.split('/')[-5]elif len(pl.split('/')) == 6:author = pl.split('/')[-6]else:author = '无'# 截取翻译者if len(pl.split('/')) == 3:translator = ' 'elif '[' in pl:if len(pl.split('/')) == 4:translator = pl.split('/')[-3]elif len(pl.split('/')) == 5:translator = pl.split('/')[-4]elif len(pl.split('/')) == 6:translator = pl.split('/')[-5]else:translator = ' '# 截取出版社if len(pl.split('/')) == 2:publisher = pl.split('/')[0]elif len(pl.split('/')) == 3:publisher = pl.split('/')[0]elif '[' in pl:if len(pl.split('/')) == 4:publisher = pl.split('/')[1]elif len(pl.split('/')) == 5:publisher = pl.split('/')[2]elif len(pl.split('/')) == 6:publisher = pl.split('/')[-3]elif len(pl.split('/')) == 7:publisher = pl.split('/')[-4]elif '[' not in pl:# if len(pl.split('/'))== 3:publisher = pl.split('/')[-3]# if len(pl.split('/')) == 6:#     publisher = pl.split('/')[-3]# elif len(pl.split('/')) == 7:#      publisher = pl.split('/')[-4]# 截取出版时间if len(pl.split('/')) == 2:time = '不详'elif len(pl.split('/')) == 4:time = pl.split('/')[-2]elif len(pl.split('/')) == 5:time = pl.split('/')[-2]elif len(pl.split('/')) == 6:time = pl.split('/')[-2]# 截取单价if '元' in pl:price = pl.split('/')[-1].split('元')[0]else:price = pl.split('/')[-1]# 获取星级数str1 = t.xpath(".//td[@valign='top']//div[@class='star clearfix']/span[1]/@class")[0].replace("allstar", "")# 此时获取到的数字其实是字符串类型,不能直接%10,需要把str转化为intnum = int(str1)star = num / 10# 获取评分score = t.xpath(".//td[@valign='top']//div[@class='star clearfix']/span[2]/text()")[0]# 获取评价人数pnum = t.xpath(".//td[@valign='top']//div[@class='star clearfix']/span[3]/text()")[0]people = re.sub("\D", "", pnum)# 获取简介comments = t.xpath(".//p[@class='quote']/span/text()")comment = comments[0] if len(comments) != 0 else "无"book = {'书名': title,'链接': link,'国家': country,'作者': author,'翻译者': translator,'出版社': publisher,'出版时间': time,'价格': price,'星级': star,'评分': score,'评价人数': people,'简介': comment}# 图片imgUrl = t.xpath(".//a/img/@src")[0]# print(imgUrl)books.append(book)imgUrls.append(imgUrl)return books, imgUrls# 4. 下载图片保存文件
def downloadimg(url, book):# 判断文件夹是否在指定路径下面,建立文件夹并把指定路径移到文件夹下面if 'img' in os.listdir(r'D:\pachong'):passelse:os.mkdir(r'D:\pachong\img')os.chdir(r'D:\pachong\img')# 返回img的二进制流img = requests.request('GET', url).contentwith open(book['书名'] + '.jpg', 'wb') as f:# print('正在下载: %s' % url)f.write(img)# 5. 数据预处理
# def processData():if __name__ == '__main__':# url = 'https://book.douban.com/top250?start=0'# 10页循环遍历for i in range(10):# 2. 定义url并获取网页源代码url = 'https://book.douban.com/top250?start={}'.format(i * 25)# print(url)html = get_html(url)# 3. 解析网页源代码sleep(1)books = parse_html(html)[0]imgUrls = parse_html(html)[1]BOOKS.extend(books)IMGURLS.extend(imgUrls)# 4. 下载图片保存文件# for i in range(250):#     # sleep(1)#     downloadimg(IMGURLS[i], BOOKS[i])os.chdir(r'D:/pachong/img')# 以csv格式写入本地bookdata = pd.DataFrame(BOOKS)bookdata.to_csv('D:/pachong/book.csv', index=False)print("图书信息写入本地成功")# 以txt格式写入本地错误# 得到的是字典格式,要想写成txt格式需要先转化成字符串格式# for i in range(25):#     with open('book.txt', 'a') as f:#         f.write(books[i] + '\n')

在这里插入图片描述
在这里插入图片描述

相关文章:

爬取豆瓣书籍数据

# 1. 导入库包 import requests from lxml import etree from time import sleep import os import pandas as pd import reBOOKS [] IMGURLS []# 2. 获取网页源代码 def get_html(url):headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36…...

基于微信小程序的电子商城购物系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...

6-图像金字塔与轮廓检测

文章目录 6.图像金字塔与轮廓检测(1)图像金字塔定义(2)金字塔制作方法(3)轮廓检测方法(4)轮廓特征与近似(5)模板匹配方法6.图像金字塔与轮廓检测 (1)图像金字塔定义 高斯金字塔拉普拉斯金字塔 高斯金字塔:向下采样方法(缩小) 高斯金字塔:向上采样方法(放大)…...

【Ai】DeepSeek本地部署+Page Assist图形界面

准备工作 1、ollama,用于部署各种开源模型,并开放接口的程序 https://ollama.com/download 2、deepseek-r1:32b 模型 https://ollama.com/library/deepseek-r1:32b 不同的模型版本对计算机性能的要求不一样,版本越高对显卡和内存的要求越高…...

【最长不下降子序列——树状数组、线段树、LIS】

题目 代码 #include <bits/stdc.h> using namespace std; const int N 1e510; int a[N], b[N], tr[N];//a保存权值&#xff0c;b保存索引,tr保存f&#xff0c;g前缀属性最大值 int f[N], g[N]; int n, m; bool cmp(int x, int y) {if(a[x] ! a[y]) return a[x] < a[…...

【实战篇章】深入探讨:服务器如何响应前端请求及后端如何查看前端提交的数据

文章目录 深入探讨&#xff1a;服务器如何响应前端请求及后端如何查看前端提交的数据一、服务器如何响应前端请求HTTP 请求生命周期全解析1.前端发起 HTTP 请求&#xff08;关键细节强化版&#xff09;2. 服务器接收请求&#xff08;深度优化版&#xff09; 二、后端如何查看前…...

Games104——引擎工具链基础

总览 工具链 用户到引擎架构图 工具链是衔接不同岗位、软件之间的桥梁&#xff0c;比如美术与技术&#xff0c;策划与美术&#xff0c;美术软件与引擎本身等&#xff0c;有Animation、UI、Mesh、Shader、Logical 、Level Editor等等。一般商业级引擎里的工具链代码量是超过…...

分层多维度应急管理系统的设计

一、系统总体架构设计 1. 六层体系架构 #mermaid-svg-QOXtM1MnbrwUopPb {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QOXtM1MnbrwUopPb .error-icon{fill:#552222;}#mermaid-svg-QOXtM1MnbrwUopPb .error-text{f…...

【漏斗图】——1

🌟 解锁数据可视化的魔法钥匙 —— pyecharts实战指南 🌟 在这个数据为王的时代,每一次点击、每一次交易、每一份报告背后都隐藏着无尽的故事与洞察。但你是否曾苦恼于如何将这些冰冷的数据转化为直观、吸引人的视觉盛宴? 🔥 欢迎来到《pyecharts图形绘制大师班》 �…...

(二)QT——按钮小程序

目录 前言 按钮小程序 1、步骤 2、代码示例 3、多个按钮 ①信号与槽的一对一 ②多对一&#xff08;多个信号连接到同一个槽&#xff09; ③一对多&#xff08;一个信号连接到多个槽&#xff09; 结论 前言 按钮小程序 Qt 按钮程序通常包含 三个核心文件&#xff1a; m…...

【Linux】从硬件到软件了解进程

个人主页~ 从硬件到软件了解进程 一、冯诺依曼体系结构二、操作系统三、操作系统进程管理1、概念2、PCB和task_struct3、查看进程4、通过系统调用fork创建进程&#xff08;1&#xff09;简述&#xff08;2&#xff09;系统调用生成子进程的过程〇提出问题①fork函数②父子进程关…...

HTB:Alert[WriteUP]

目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用ffuf对alert.htb域名进行子域名FUZZ 使用go…...

ARM嵌入式学习--第十天(UART)

--UART介绍 UART(Universal Asynchonous Receiver and Transmitter)通用异步接收器&#xff0c;是一种通用串行数据总线&#xff0c;用于异步通信。该总线双向通信&#xff0c;可以实现全双工传输和接收。在嵌入式设计中&#xff0c;UART用来与PC进行通信&#xff0c;包括与监控…...

玉米苗和杂草识别分割数据集labelme格式1997张3类别

数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数)&#xff1a;1997 标注数量(json文件个数)&#xff1a;1997 标注类别数&#xff1a;3 标注类别名称:["corn","weed","Bean…...

哈夫曼树

哈夫曼树&#xff08;Huffman Tree&#xff09;是一种最优的二叉树&#xff0c;常用于数据压缩&#xff0c;如在 Huffman 编码中使用。它是根据字符出现的频率来构造的&#xff0c;频率越高的字符越靠近树的根&#xff0c;频率低的字符则在较深的节点上。其核心思想是通过构建一…...

wax到底是什么意思

在很久很久以前&#xff0c;人类还没有诞生文字之前&#xff0c;人类就产生了语言&#xff1b;在诞生文字之前&#xff0c;人类就已经使用了语言很久很久。 没有文字之前&#xff0c;人们的语言其实是相对比较简单的&#xff0c;因为人类的生产和生活水平非常低下&#xff0c;…...

笔记:使用ST-LINK烧录STM32程序怎么样最方便?

一般板子在插件上&#xff0c; 8脚 3.3V;9脚 CLK;10脚 DIO;4脚GND ST_Link 19脚 3.3V;9脚 CLK;7脚 DIO;20脚 GND 烧录软件&#xff1a;ST-LINK Utility&#xff0c;Keil_5; ST_Link 接口针脚定义&#xff1a; 按定义连接ST_Link与电路板&#xff1b; 打开STM32 ST-LINK Uti…...

数据分析系列--[11] RapidMiner,K-Means聚类分析(含数据集)

一、数据集 二、导入数据 三、K-Means聚类 数据说明:提供一组数据,含体重、胆固醇、性别。 分析目标:找到这组数据中需要治疗的群体供后续使用。 一、数据集 点击下载数据集 二、导入数据 三、K-Means聚类 Ending, congratulations, youre done....

Python在数据科学领域的深度应用:从数据处理到机器学习模型构建

Python在数据科学领域的深度应用:从数据处理到机器学习模型构建 在当今大数据与人工智能蓬勃发展的时代,Python凭借其简洁的语法、强大的库支持和活跃的社区,已成为数据科学家和工程师的首选编程语言。本文将深入探讨Python在数据科学领域的应用,从数据预处理、探索性分析…...

海外问卷调查渠道查,具体运营的秘密

相信只要持之以恒并逐渐掌握技巧&#xff0c;每一位调查人在踏上征徐之时都会非常顺利的。并在日后的职业生涯中拥有捉刀厮杀的基本技能&#xff01;本文会告诉你如何做好一个优秀的海外问卷调查人。 在市场经济高速发展的今天&#xff0c;众多的企业为了自身的生存和发展而在…...

2026免费降AI率工具Top10:一键去机味 首选这款稳过检测

现在写论文用AI辅助早已是常态&#xff0c;但随之而来的AIGC检测卡得越来越严&#xff0c;熬了好几天改出来的稿子要是被判定AI率超标&#xff0c;打回重写都是轻的&#xff0c;耽误答辩进度才最让人头疼。 所以降AI、降低AI率已经成了毕业生的必备技能&#xff0c;只是市面上…...

像素剧本圣殿惊艳效果:深紫+荧光绿UI中生成的古装剧场景描述高清截图

像素剧本圣殿惊艳效果&#xff1a;深紫荧光绿UI中生成的古装剧场景描述高清截图 1. 视觉震撼&#xff1a;当复古像素美学遇上AI剧本创作 在数字创作工具同质化严重的今天&#xff0c;像素剧本圣殿以其独特的视觉风格脱颖而出。这款基于Qwen2.5-14B-Instruct深度微调的专业剧本…...

树莓派5新手避坑:用L298N驱动直流电机,从接线到代码的保姆级教程

树莓派5与L298N电机驱动实战&#xff1a;从硬件搭建到PWM调速的深度解析 第一次用树莓派控制直流电机时&#xff0c;我盯着桌上散落的杜邦线和L298N模块&#xff0c;突然意识到自己可能低估了这个看似简单的项目。为什么电机时而抽搐时而静止&#xff1f;为什么PWM调速总是不稳…...

多模态场景:头巾误判为厨师帽 — 问题分析与调优指南

多模态场景&#xff1a;头巾误判为厨师帽 — 问题分析与调优指南适用对象&#xff1a;使用 Qwen-VL 等多模态大模型做「厨师帽 / 头饰」相关识别时的面试问答、方案设计与落地调优参考。1. 问题本质&#xff1a;为什么会把头巾当成厨师帽 这通常不是「模型坏了」&#xff0c;而…...

OpenClaw个性化设置:Qwen3.5-9B模型参数调优实战

OpenClaw个性化设置&#xff1a;Qwen3.5-9B模型参数调优实战 1. 为什么需要调整模型参数&#xff1f; 上周我在用OpenClaw自动处理一批技术文档时&#xff0c;遇到了一个奇怪的现象&#xff1a;同样的任务指令&#xff0c;有时候AI能完美执行&#xff0c;有时候却会输出一堆无…...

能源在线监测管理系统平台[fu源码]

EMS能源管理系统 基于 Vue3 / Spring Boot/Spring Cloud & Alibaba 微服务架构 项目技术框架 RuoYi-Cloud 基础框架上开发而成 源智优控AI能源大脑&#xff0c;能源AI版&#xff0c;即将上线 仓库地址&#xff1a; https://gitee.com/guangdong122/energy-management …...

【JupyterLab实战】构建跨平台AI算力监控仪表盘

1. 为什么需要跨平台AI算力监控&#xff1f; 在AI开发过程中&#xff0c;我们经常遇到这样的场景&#xff1a;模型训练到一半突然卡死&#xff0c;却不知道是GPU内存爆了还是CPU瓶颈&#xff1b;多卡并行时某张卡莫名其妙跑不满&#xff1b;昇腾芯片的温度报警频繁触发却找不到…...

【FMCW雷达】频率调制连续波FMCW雷达系统(从波形生成到利用小胞平均常误报率CA-CFAR进行目标检测)【含Matlab源码 15242期】含报告

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;Matlab武动乾坤博客之家&#x1f49e;…...

工业机器人嵌入式系统建模与自动化工具项目三基于RAPID指令的故障排查与项目实施

目录 一、 项目背景与研发目标 1.1 项目研发背景 1.2 项目核心目标 二、 项目全周期进展 2.1 需求分析与环境搭建阶段&#xff08;完成度100%&#xff09; 2.2 核心模块编码开发阶段&#xff08;完成度100%&#xff09; 2.3 功能调试阶段&#xff08;核心故障爆发…...

论文AIGC全红99%怎么救?2026实测Gemini去痕术:3组指令集联合3大工具,稳稳拉回10%安全线

视角重构&#xff0c;打破“平铺直叙”的机械感 AI生成的最大特征是“正确但平庸的上帝视角”。要ai降ai&#xff0c;第一步不是改词&#xff0c;而是强行植入一个具有批判性的“人类观察者”视角&#xff0c;迫使模型重组叙事逻辑。 核心原理&#xff1a;通过引入“辩证法”…...