当当网书籍信息爬虫

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:passreturn 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.mzph.cn/diannao/67691.shtml

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

相关文章

计算机网络 (50)两类密码体制

前言 计算机网络中的两类密码体制主要包括对称密钥密码体制(也称为私钥密码体制、对称密码体制)和公钥密码体制(也称为非对称密码体制、公开密钥加密技术)。 一、对称密钥密码体制 定义: 对称密钥密码体制是一种传…

【PowerQuery专栏】实现JSON数据的导入

Json 格式数据是在互联网数据格式传输使用的非常频繁的一类数据,图7.44为Json数据格式中比较典型的数据格式。 PowerQuery进行Json数据解析使用的是Json.Document进行数据解析,Json.Document目前有2个参数。 参数1为内容数据,数据类型为二进制类型,值为需要解析的Json数据参…

软件授权管理中的软件激活向导示例

软件激活向导示例 在软件许可中,提供许可应该是简单和安全的。这适用于想要在中央许可证服务器上创建新许可证的软件开发人员,也适用于需要在其设备上获得许可证的最终用户。如果所讨论的系统有互联网连接,或是暂时的连接,就可以…

【HarmonyOS-开发指南】

HarmonyOS-开发指南 ■ DevEco Studio■ ArkTS■ ArkUI■ ArkCompiler■ DevEco Testing■ DevEco Device Tool■ DevEco Service ■ DevEco Studio 添加链接描述 ■ ArkTS 添加链接描述 ■ ArkUI ■ ArkCompiler ■ DevEco Testing ■ DevEco Device Tool ■ DevEco S…

Leetcode::2239. 找到最接近 0 的数字

2239. 找到最接近 0 的数字 给你一个长度为 n 的整数数组 nums ,请你返回 nums 中最 接近 0 的数字。如果有多个答案,请你返回它们中的 最大值 。 示例 1: 输入:nums [-4,-2,1,4,8] 输出:1 解释: -4 到 …

【手写数据库内核组件】1001词法分析器,语言被程序识别的第一步,将语句分解为最小词根token

1001 词法分析器 ​专栏内容: postgresql使用入门基础手写数据库toadb并发编程个人主页:我的主页 管理社区:开源数据库 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 文章目录 1001 词法分析器一、概述 二、词法分析机制原理 2.1 分析流程 2.2 预定义规则 2.3 …

模型部署工具01:Docker || 用Docker打包模型 Build Once Run Anywhere

Docker 是一个开源的容器化平台,可以让开发者和运维人员轻松构建、发布和运行应用程序。Docker 的核心概念是通过容器技术隔离应用及其依赖项,使得软件在不同的环境中运行时具有一致性。无论是开发环境、测试环境,还是生产环境,Do…

【云岚到家】-day03-门户缓存方案选择

【云岚到家】-day03-门户缓存方案选择 1.门户常用的技术方案 什么是门户 说到门户马上会想到门户网站,中国比较早的门户网站有新浪、网易、搜狐、腾讯等,门户网站为用户提供一个集中的、易于访问的平台,使他们能够方便地获取各种信息和服务…

ASP.NET Core 中的 JWT 鉴权实现

在当今的软件开发中,安全性和用户认证是至关重要的方面。JSON Web Token(JWT)作为一种流行的身份验证机制,因其简洁性和无状态特性而被广泛应用于各种应用中,尤其是在 ASP.NET Core 项目里。本文将详细介绍如何在 ASP.…

网络安全VS数据安全

关于网络安全和数据安全,我们常听到如下两种不同声音: 观点一:网络安全是数据安全的基础,把当年做网络安全的那一套用数据安全再做一遍。 观点二:数据安全如今普遍以为是网络安全的延伸,实际情况是忽略数据…

SQL多行数据合并到一行中的一个字段

在SQL中,将多行数据转换为一行数据通常涉及到使用聚合函数和字符串函数。这种转换在数据库中被称为“行转列”或“透视”操作。以下是一些常用的方法来实现多行转一行: 1. 使用GROUP_CONCAT()(MySQL) 在MySQL中,可以…

3D Vision--计算点到平面的距离

写在前面 本文内容 计算点到平面的距离 平台/环境 python open3d 转载请注明出处: https://blog.csdn.net/qq_41102371/article/details/121482246 目录 写在前面准备Open3D代码完 准备Open3D pip install open3d代码 import open3d as o3ddef compute_points2…

【数据分析(二)】初探 Pandas

目录 引言1. 基本数据结构1.1. Series 的初始化和简单操作1.2. DataFrame 的初始化和简单操作1.2.1. 初始化与持久化1.2.2. 读取查看1.2.3. 行操作1.2.4. 列操作1.2.5. 选中筛查 2. 数据预处理2.0. 生成样例表2.1. 缺失值处理2.2. 类型转换和排序2.3. 统计分析 3. 数据透视3.0.…

Python----Python高级(文件操作open,os模块对于文件操作,shutil模块 )

一、文件处理 1.1、文件操作的重要性和应用场景 1.1.1、重要性 数据持久化: 文件是存储数据的一种非常基本且重要的方式。通过文件,我们可 以将程序运行时产生的数据永久保存下来,以便将来使用。 跨平台兼容性: 文件是一种通用…

解决 Error: Invalid or corrupt jarfile day04_studentManager.jar 报错问题

在 Java 开发过程中,我们可能会遇到这样的报错信息:Error: Invalid or corrupt jarfile day04_studentManager.jar。这个错误通常表示 day04_studentManager.jar 文件可能已损坏或无效,下面将为大家详细介绍如何解决这个问题。 一、错误点分…

解决用 rm 报bash: /usr/bin/rm: Argument list too long错

但目录里面文件过多用 rm 报bash: /usr/bin/rm: Argument list too long错时怎么办: 看看以下操作记录 rootmcu:/# cd /tmp rootmcu:/tmp# rm -f /tmp/chunk* bash: /usr/bin/rm: Argument list too long rootmcu:/tmp# rm -rf /tmp/chunk* bash: /usr/bin/rm: Arg…

Ubuntu 24.04 LTS 安装 Docker Desktop

Docker 简介 Docker 简介和安装Ubuntu上学习使用Docker的详细入门教程Docker 快速入门Ubuntu版(1h速通) Docker 安装 参考 How to Install Docker on Ubuntu 24.04: Step-by-Step Guide。 更新系统和安装依赖 在终端中运行以下命令以确保系统更新并…

python+pygame+pytmx+map editor开发一个tiled游戏demo 05使用object层初始化player位置

代码 import mathimport pygame# 限制物体在屏幕内 import pytmxdef limit_position_to_screen(x, y, width, height):"""限制物体在屏幕内"""x max(0, min(x, SCREEN_WIDTH - width)) # 限制x坐标y max(0, min(y, SCREEN_HEIGHT - height))…

函数递归的介绍

1.递归的定义 在C语言中,递归就是函数自己调用自己 上面的代码就是 main 函数在函数主体内 自己调用自己 但是,上面的代码存在问题:main 函数反复地 自己调用自己 ,不受限制,停不下来。 最终形成死递归,…

【PCIe 总线及设备入门学习专栏 6.1 -- PCIe MCTP】

文章目录 1 什么是 MCTP?2 MCTP 消息在 PCIe 中的传输特点3 PCIe MCTP 的局限性(1) 出站(Outbound)MCTP 消息分解的限制(2) 入站(Inbound)MCTP 消息组装的限制4 MCTP 消息的实际使用流程发送端处理流程接收端处理流程5 实际使用场景例 1:管理命令传输例 2:监控数据报告例…