当前位置: 首页 > 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;众多的企业为了自身的生存和发展而在…...

穷举vs暴搜vs深搜vs回溯vs剪枝系列一>单词搜索

题解如下 题目&#xff1a;解析决策树&#xff1a;代码设计&#xff1a; 代码&#xff1a; 题目&#xff1a; 解析 决策树&#xff1a; 代码设计&#xff1a; 代码&#xff1a; class Solution {private boolean[][] visit;//标记使用过的数据int m,n;//行&#xff0c;列char…...

万字长文深入浅出负载均衡器

前言 本篇博客主要分享Load Balancing&#xff08;负载均衡&#xff09;&#xff0c;将从以下方面循序渐进地全面展开阐述&#xff1a; 介绍什么是负载均衡介绍常见的负载均衡算法 负载均衡简介 初识负载均衡 负载均衡是系统设计中的一个关键组成部分&#xff0c;它有助于…...

基于SpringBoot的青年公寓服务平台的设计与实现(源码+SQL脚本+LW+部署讲解等)

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

经典游戏红色警戒2之英语

1. New construction options 部署新的建筑物&#xff08;一般是部署基地车时说的&#xff09;。 2. Loading 等待。&#xff08;正在进行&#xff09; 3. Construction complete 建筑完成。 4. On hold 等待。&#xff08;暂停进行&#xff09; 5. Canceled 取消。 6. Ca…...

IM 即时通讯系统-50-[特殊字符]cim(cross IM) 适用于开发者的分布式即时通讯系统

IM 开源系列 IM 即时通讯系统-41-开源 野火IM 专注于即时通讯实时音视频技术&#xff0c;提供优质可控的IMRTC能力 IM 即时通讯系统-42-基于netty实现的IM服务端,提供客户端jar包,可集成自己的登录系统 IM 即时通讯系统-43-简单的仿QQ聊天安卓APP IM 即时通讯系统-44-仿QQ即…...

QtCreator在配置Compilers时,有一个叫ABI的选项,那么什么是ABI?

问题提出 QtCreator在配置Compilers时,有一个叫ABI的选项,那么什么是ABI&#xff1f; ABI&#xff08;Application Binary Interface&#xff09;介绍 ABI&#xff08;Application Binary Interface&#xff0c;应用二进制接口&#xff09;是指应用程序与操作系统或其他程序…...

处理 **5万字(约7.5万-10万token,中文1字≈1.5-2token)** 的上下文

处理 5万字&#xff08;约7.5万-10万token&#xff0c;中文1字≈1.5-2token&#xff09; 的上下文&#xff0c;对模型的长文本处理能力和显存要求较高。以下是不同规模模型的适用性分析及推荐&#xff1a; 一、模型规模与上下文能力的关系 模型类型参数量最大上下文长度&#…...

【狂热算法篇】探秘图论之Dijkstra 算法:穿越图的迷宫的最短路径力量(通俗易懂版)

羑悻的小杀马特.-CSDN博客羑悻的小杀马特.擅长C/C题海汇总,AI学习,c的不归之路,等方面的知识,羑悻的小杀马特.关注算法,c,c语言,青少年编程领域.https://blog.csdn.net/2401_82648291?typebbshttps://blog.csdn.net/2401_82648291?typebbshttps://blog.csdn.net/2401_8264829…...

springboot 启动原理

目标&#xff1a; SpringBootApplication注解认识了解SpringBoot的启动流程 了解SpringFactoriesLoader对META-INF/spring.factories的反射加载认识AutoConfigurationImportSelector这个ImportSelector starter的认识和使用 目录 SpringBoot 启动原理SpringBootApplication 注…...

浅析DDOS攻击及防御策略

DDoS&#xff08;分布式拒绝服务&#xff09;攻击是一种通过大量计算机或网络僵尸主机对目标服务器发起大量无效或高流量请求&#xff0c;耗尽其资源&#xff0c;从而导致服务中断的网络攻击方式。这种攻击方式利用了分布式系统的特性&#xff0c;使攻击规模更大、影响范围更广…...