当当网图书信息获取

news/2025/2/28 15:42:58/文章来源:https://www.cnblogs.com/yujie168/p/18640906
当当网图书信息获取

虽然现在是信息时代,大多数人都会选择电子读物,但是纸质图书仍是我们大多数学生不可或缺的.

准备工作:

​ 查看网站允许抓取权限:进行网页抓取时必须遵守网站的robots.txt规则.频繁地请求会给网站服务器带来负担,导致违反服务条款导致IP封禁

https://www.dangdang.com/robots.txt查看哪些页面不允许获取

分析目标页面
  • 确定要获取的信息(书籍名称、出版社、价格、评价数量等)
  • 使用浏览器开发者工具查看这些信息在HTML中如何表示
  • 查看分页机制,了解如何构建URL实现分页
分页链接
#首页
https://search.dangdang.com/?key=Java&act=input
key=Java表示该链接是接收关键字搜索后的链接
#第二页
https://search.dangdang.com/?key=Java&act=input&page_index=2
#第三页
https://search.dangdang.com/?key=Java&act=input&page_index=3

通过观察发现.除了首页链接意外,后续链接page_index=页码,这就很方便构建链接了.对于首页链接我们可以尝试输入1也是能够生成的,当然也可以在循环时候判断,如果i=1那么链接为https://search.dangdang.com/?key=Java&act=input

正式分析

通过浏览器开发工具我们可以快速定位到所需的信息都存在于<ul class='bigimg' id='component_59'>下的li标签中.所以我们只需要获取到页面的源码之后通过定位语句获取到所有的li标签即可,之后对其进行循环遍历分别提取出所需的信息清洗,最后写入保存

首先是书名,点击开发者工具会发现书名的结构如下图所示:li -> p -> a标签中的title文本即是所需的书名

其次是价格,同样的操作会发现其结构li -> p.price -> span中即是价格

紧接着是出版社,其结构li -> p.search_book_author -> span[3] -> a

最后是评价数,结构li -> p.search_star_line -> span -> a

保存数据

将获取数据添加到列表中使用pandas统一进行格式化写入

完整代码
import pandas as pd
import parsel, requests, timedef get_html(url):headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36"}response = requests.get(url, headers=headers)if response.status_code == 200:return response.textreturn Nonebook_info = []
B_title = ['书名', '售价', '出版社', '评论']def get_book_info():sel = parsel.Selector(get_html(url))ul_list = sel.css('ul.bigimg > li')for ul in ul_list:book_title = ul.css('p.name > a::attr(title)').get()book_price = ul.css('p.price > span::text').get()book_publish = ul.css('p.search_book_author span:nth-of-type(3) > a::text').get()  # css选择器独特写法,意思是选择第三个span标签book_review = ul.css('p.search_star_line > a::text').get()book_info.append([book_title,book_price,book_publish,book_review])for i in range(1, 10):print('正在爬取第%s页' % i)url = f"https://search.dangdang.com/?key=python&act=input&page_index={i}"get_html(url)get_book_info()time.sleep(1)
book_info = pd.DataFrame(columns=B_title, data=book_info)
book_info.to_excel('book_info.xlsx', index=False)

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

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

相关文章

洛谷题单指南-线段树的进阶用法-P4587 [FJOI2016] 神秘数

原题链接:https://www.luogu.com.cn/problem/P4587 题意解读:对于序列a[n],查询m个区间[l,r]数值对应集合的神秘数。集合 S 的神秘数定义为最小的不能被 S 的子集的和表示的正整数。 解题思路: 对于区间[l,r],从小到大将数值选入集合,来观察神秘数的变化,设S当前的神秘数…

pandas-Series

一、Series特点 二、特点练习import pandas as pd import numpy as np #pandas---Series#默认索引从0开始且数组类型数据 data=np.array([张三,李四,王五,赵六]) s=pd.Series(data) print(s)#自定义索引 s=pd.Series(data,index=[100,101,102,103],name=series_name) print(s)…

软件系统验收全流程解析:从准备到后续保障,关键要点一览

验收准备阶段确定验收标准:在项目启动初期,就应根据项目需求和合同约定,制定详细的验收标准。验收标准应涵盖功能、性能、安全、兼容性、易用性等各个方面,确保软件系统满足用户的业务需求和预期。 组建验收团队:验收团队通常由用户方代表、项目负责人、技术专家、测试人员…

CDS标准视图:维护活动类型 I_MaintenanceActivityType

视图名称:维护活动类型 I_MaintenanceActivityType 视图类型:基础 视图代码:点击查看代码 @ObjectModel.supportedCapabilities: [ #ANALYTICAL_DIMENSION, #EXTRACTION_DATA_SOURCE, #CDS_MODELING_ASSOCIATION_TARGET,#SQL_DATA_SOURCE, #CDS_MODELING_DATA_SOURCE ]@Meta…

封闭几何形状中的静压液位测量——填充高度的计算

与开口容器不同,封闭几何形状(例如气密罐或者加压容器)中的液位计算需要通过静水压力测量来补偿封闭在液体上方的气体的压力。 对于封闭或加压环境下的液位测量,非通风的容器中的液位测量需要通过第二压力变送器对封闭的气体进行额外的压力测量。在一个密闭容器内,主要使用…

CDS标准视图:PM通知单 I_LocationAnalysisCube

视图名称:PM通知单 I_LocationAnalysisCube 视图类型:分析 视图代码:点击查看代码 @EndUserText.label: Location Analysis - Cube @VDM.viewType: #COMPOSITE @AbapCatalog.sqlViewName: ILOCANALYSISCUBE @AccessControl.authorizationCheck: #CHECK @ClientHandling.algo…

推荐一款集监控和埋点于一体的前端性能监控工具!开源、简单易用、功能强大!

在互联网的快速发展下,网站已成为企业和个人展示信息、提供服务的重要平台。然而,随之而来的网站性能问题也日益凸显,如加载速度慢、频繁出错、服务器故障、数据异常、网络攻击等。如何确保用户能够快速稳定地访问网站成为了一个亟待解决的问题。 为了帮助大家解决这一问题,…

关关难——软工个人总结

一、学期回顾 1.1回顾你对软件工程课程的想象软工的印象 在课程开始前,我想象中的软工课程是通过理论知识来引导我们学习如何开发一款软件,整个学习的重点是软件如何开发,需要怎样的技术来支撑开发,而课程更多的会教授学生这些技术,事实证明我想错了,软件工程这门课介绍…

设计一个包含KV操作、 磨损均衡的FLASH数据存储组件

在嵌入式环境中常用的存储器有NORFlash、NANDFlash、EEPROM,前两个一般擦写寿命约为10w次,EEPROM的使用次数约为100w次,寿命长的我先不管QAQ,这里的寿命指的是当flash中的存储单元写入或者擦除超过这个次数,这个存储单元可能会出现出错、变慢等无法正常读写的问题。按照木…

cursor 1秒钟写的登录页面,真好看

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>炫酷登录页面</title><style>* {…

nuxt 添加 redis 缓存

这个文章的主要目的是通过 redis 缓存 nuxt2 中服务端渲染的页面。从而优化加载速度以及减轻服务端的压力。Nuxt 是什么 Nuxt.js 是一个基于 Vue.js 的开源框架,旨在为开发者提供一个简单的方式来构建高性能的 Vue 应用。它提供了许多功能,使得开发服务器端渲染(SSR)、静态…