当当网书籍信息爬虫

news2025/3/1 22:01:55

1.基本理论

1.1概念体系

        网络爬虫又称网络蜘蛛、网络蚂蚁、网络机器人等,可以按照我们设置的规则自动化爬取网络上的信息,这些规则被称为爬虫算法。是一种自动化程序,用于从互联网上抓取数据。爬虫通过模拟浏览器的行为,访问网页并提取信息。这些信息可以是结构化的数据(如表格数据),也可以是非结构化的文本。爬虫任务的执行流程通常包括发送HTTP请求、解析HTML文档、提取所需数据等步骤。

1.2技术体系

        1请求库:用于向目标网站发送HTTP请求。常用的请求库包括requests、httplib、urllib等。这些库可以帮助我们模拟浏览器行为,发送GET、POST等请求,并处理响应内容。

        2.解析库:用于解析HTML或XML文档,提取出我们需要的数据。常用的解析库包括BeautifulSoup、lxml、pyquery等。这些库可以帮助我们根据HTML文档的结构和标签,提取出我们需要的数据。

        3.存储库:用于将爬取到的数据存储到本地或数据库中。常用的存储库包括sqlite3、mysql-connector-python、pymongo等。这些库可以帮助我们将数据存储到关系型数据库或非关系型数据库中,以便后续分析和利用。

2.代码编写流程

代码编写流程

        代码共分为3部分,1网页地址规律函数。2网页数据解析,3数据存储。

2.1.网页地址规律

 第一页

网页地址图书畅销榜-近24小时畅销书排行榜-当当畅销图书排行榜

第二页

网页地址第2页_图书畅销榜-近24小时畅销书排行榜-当当畅销图书排行榜

对上面地址分析,发现地址中后面数字发生改变,第一页位数为1,第二页位数为2

依次类推。

编写翻页函数

函数中number为页面地址位数

2.2.页面解析

2.3.网页数据保存

·

3.应用举例

该代码对获取数据进行列表切片处理,由于爬虫数据都是字符串数据,对排名,评论数,转化为整数型数据,推荐数转化为浮点型数据,

网页存在些书籍无电子书价格,编写函数处理该问题,对电子书:字段进行查询,无该字段返回-1,

4.编写代码

import requests
from openpyxl import Workbook,load_workbook
import requests
from bs4 import BeautifulSoup
import os
### 网页请求函数
def wy(number):
    res=requests.get(url='http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-24hours-0-0-1-{}'.format(number))
    res.encoding = res.apparent_encoding#解决网页乱码问题
    return res.text
## 网页书籍解析部分
def shuj(number):
    soup = BeautifulSoup(wy(number), 'html.parser')
    f1=soup.find('ul',attrs={'class':"bang_list clearfix bang_list_mode"})
    f2=f1.find_all('li')
    shuj_list=[]## 数据存放列表
    for i in f2:

        #shuj1=i.find('div',attrs={'class':"list_num red"})
        shuj1=i.text.split("\n")
        print(shuj1)
        #shuj_list.append(list(filter(None, shuj1)))
        shuj_list.append(chuli(list(filter(None, shuj1))))
        #print(shuj1)
    return shuj_list
    #print(f)
## 数据处理函数
def chuli(shuj_list):
    print(shuj_list)
    shuru_list=[]## 转化数据存储格式列表
    try:
        shuru_list.append(int(shuj_list[0].replace('.','')))# 排名 # int函数转化书籍类型,字符串转化为整数
        shuru_list.append(shuj_list[1].replace('...', ''))# 书名
        shuru_list.append(int(shuj_list[2].split("条评论")[0]))# 评论数
        shuru_list.append(float(shuj_list[2].split("条评论")[1][:-2].replace('%',''))) # 推荐数
        shuru_list.append(shuj_list[3].split(" 著;")[0]) #作者
        shuru_list.append(shuj_list[4].split("\xa0")[0]) ## 出版时间
        print(shuj_list[4])
        shuru_list.append(shuj_list[4].split("\xa0")[1])# 出版社
        shuru_list.append(shuj_list[5])# 价格
        shuru_list.append(shuj_list[6].replace("\r",''))## 原价
        shuru_list.append(shuj_list[7].replace("\r",'').replace(' ','')) # 折数
        shuru_list.append(dzjiage(shuj_list[9]))# 电子书价格
    except:
        pass
    return shuru_list
## 处理网页中无电子书价格函数
def dzjiage(x):
    if x.find("电子书:")==-1:
        k="无数据"
    else:
        k=x.replace("电子书:",'')
    return k
## 写入excel表类函数
class Excel_write():
    def __init__(self):
        self.excel_file = "当当网书籍信息.xlsx"
        if not os.path.exists(self.excel_file):
            self.wk = Workbook();#创建excel工作薄
            self.wk.create_sheet("书籍信息",0);#sheet表名,位置(从0开始)
    # 默认选择当前活跃选项卡
            self.wb =self.wk['书籍信息']
            self.wb.append(['排名','书名','评论数','推荐数','作者','出版时间','出版社','价格','原价','折数','电子书价格']);#横向插入数据
            self.wk.save(self.excel_file)
        self.wk_load = load_workbook(filename=self.excel_file)
        self.wb_load = self.wk_load['书籍信息']
    def nr1(self,number):
        shuj_list1=shuj(number)## 循环爬取到的数据
        for i in shuj_list1:
            self.wb_load.append(i)## 写入数据
            self.wk_load.save(filename=self.excel_file)## 数据保存


if __name__=="__main__":
    for number in range(1,26):# number为网页的页数
        Excel_write().nr1(number)

 5.运行结果

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据分享】1929-2024年全球站点的逐月平均气温数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标,其中又以气温指标最为常用!说到气温数据,最详细的气温数据是具体到气象监测站点的气温数据!本次我们为大家带来的就是具体到气象监…

【鱼皮大佬API开放平台项目】Spring Cloud Gateway HTTPS 配置问题解决方案总结

问题背景 项目架构为前后端分离的微服务架构: 前端部署在 8000 端口API 网关部署在 9000 端口后端服务包括: api-backend (9001端口)api-interface (9002端口) 初始状态: 前端已配置 HTTPS(端口 8000)后端服务未配…

qml DirectionalBlur详解

1、概述 DirectionalBlur是QML(Qt Modeling Language)中用于创建方向模糊效果的一种图形效果类型。它通过对源图像的像素进行模糊处理,产生一种源项目朝着模糊方向移动的感知印象。这种模糊效果被应用到每个像素的两侧,因此设置方…

图像处理|闭运算

闭运算(Closing)是形态学操作中的另一种基本操作,它与开运算(Opening)类似,但执行的步骤相反。闭运算结合了膨胀和腐蚀操作,顺序为 先膨胀后腐蚀。这种操作通常用于填补图像中的小空洞&#xff…

大模型高并发部署方案探究

版本 内容 姓名 时间 V1.0 新建 xx 2025-01-16 声明:只是进行探究,后续真正实践后,会更新新的内容 前置条件:70B的模型,并发要求200 性能测试参考链接 Benchmarking LLM Inference Backends :表明一台A100(8…

Java并发06 - ThreadLocal详解

ThreadLocal详解 文章目录 ThreadLocal详解一:认识 ThreadLocal 线程局部存储1:ThreadLocal特点2:如何实现线程隔离3:继承父线程的局部存储4:自动清理与内存泄漏问题5:ThreadLocal使用场景6:阿里…

【设计模式】 单例模式(单例模式哪几种实现,如何保证线程安全,反射破坏单例模式)

单例模式 作用:单例模式的核心是保证一个类只有一个实例,并且提供一个访问实例的全局访问点。 实现方式优缺点饿汉式线程安全,调用效率高 ,但是不能延迟加载懒汉式线程安全,调用效率不高,能延迟加载双重检…

【漏洞预警】FortiOS 和 FortiProxy 身份认证绕过漏洞(CVE-2024-55591)

文章目录 一、产品简介二、漏洞描述三、影响版本四、漏洞检测方法五、解决方案 一、产品简介 FortiOS是Fortinet公司核心的网络安全操作系统,广泛应用于FortiGate下一代防火墙,为用户提供防火墙、VPN、入侵防御、应用控制等多种安全功能。 FortiProxy则…

记录一次 centos 启动失败

文章目录 现场1分析1现场2分析2搜索实际解决过程 现场1 一次断电,导致 之前能正常启动的centos 7.7 起不来了有部分log , 关键信息如下 [1.332724] XFS(sda3): Internal error xfs ... at line xxx of fs/xfs/xfs_trans.c [1.332724] XFS(sda3): Corruption of in-memory data…

关于vite+vue3+ts项目中env.d.ts 文件详解

env.d.ts 文件是 Vite 项目中用于定义全局类型声明的 TypeScript 文件。它帮助开发者向 TypeScript提供全局的类型提示,特别是在使用一些特定于 Vite 的功能时(如 import.meta.env)。以下是详细讲解及代码示例 文章目录 **1. env.d.ts 文件的…

虚拟专用网VPN的概念及实现VPN的关键技术

虚拟专用网VPN通过建立在公共网络上的重要通道(1分),实现远程用户、分支机构、业务伙伴等与机构总部网络的安全连接,从而构建针对特定组织机构的专用网络,实现与专用网络类似的功能,可以达到PN安全性的目的,同时成本相对要低很多(…

将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch(1)

问题 项目里使用了 AzureBlob 存储了用户上传的各种资源文件,近期 AzureBlob 的流量费用增长很快,想通过分析Blob的日志,获取一些可用的信息,所以有了这个需求:将存储账户的日志(读写,审计&…

X-12-ARIMA:季节性调整(Seasonal Adjustment)的强大工具,介绍数学原理

X-12-ARIMA:季节性调整的强大工具 在经济学、金融学以及各类统计数据分析中,季节性调整(Seasonal Adjustment)是一个至关重要的步骤。许多经济指标,如GDP、失业率和零售销售数据等,往往会受到季节性因素的…

.netframwork模拟启动webapi服务并编写对应api接口

在.NET Framework环境中模拟启动Web服务,可以使用几种不同的方法。一个常见的选择是利用HttpListener类来创建一个简单的HTTP服务器,或者使用Owin/Katana库来自托管ASP.NET Web API或MVC应用。下面简要介绍Owin/Katana示例代码。这种方法更加灵活&#x…

网络安全构成要素

一、防火墙 组织机构内部的网络与互联网相连时,为了避免域内受到非法访问的威胁,往往会设置防火墙。 使用NAT(NAPT)的情况下,由于限定了可以从外部访问的地址,因此也能起到防火墙的作用。 二、IDS入侵检…

免费送源码:Java+ssm+MySQL 基于PHP在线考试系统的设计与实现 计算机毕业设计原创定制

摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对在线考试等问题,对如何通过计算…

html中鼠标位置信息

pageX:鼠标距离页面的最左边的距离,包括滚动条的长度。clientX:鼠标距离浏览器视口的左距离,不包括滚动条。offsetX:鼠标到事件源左边的距离。movementX:鼠标这次触发的事件的位置相对于上一次触发事件的位…

光谱相机的光谱分辨率可以达到多少?

多光谱相机 多光谱相机的光谱分辨率相对较低,波段数一般在 10 到 20 个左右,光谱分辨率通常在几十纳米到几百纳米之间,如常见的多光谱相机光谱分辨率为 100nm 左右。 高光谱相机 一般的高光谱相机光谱分辨率可达 2.5nm 到 10nm 左右&#x…

RAG 切块Chunk技术总结与自定义分块实现思路

TrustRAG项目地址🌟:https://github.com/gomate-community/TrustRAG 可配置的模块化RAG框架 切块简介 在RAG(Retrieval-Augmented Generation)任务中,Chunk切分是一个关键步骤,尤其是在处理结构复杂的PDF文…

Java基础——概念和常识(语言特点、JVM、JDK、JRE、AOT/JIT等介绍)

我是一个计算机专业研0的学生卡蒙Camel🐫🐫🐫(刚保研) 记录每天学习过程(主要学习Java、python、人工智能),总结知识点(内容来自:自我总结网上借鉴&#xff0…