AI网络爬虫-从当当网批量获取图书信息

工作任务和目标:用户输入一个图书名称,然后程序自动从当当网批量获取图书信息

查看相关元素在源代码中的位置:

第一步:在deepseek中输入提示词:

你是一个Python爬虫专家,一步步的思考,完成以下网页爬取的Python脚本任务:

用户输入一个关键词,接受这个关键词,保存为变量{book};

在F:\aivideo文件夹里面新建一个Excel文件:{book}.xlsx

打开网页:https://search.dangdang.com/?key={book}&act=input&page_index={pagenumber}&sort_type=sort_sale_amt_desc#J_tab

({pagenumber}这个变量的值是从1到100);

网页的编码为charset=GB2312;

解析网页的源代码,并打印输出;

定位class="bigimg" 的ul 标签;

在定位ul 标签内定位所有的li 标签,

在li 标签内定位class="pic"的a标签,提取其title属性值,作为图书标题,保存到{book}.xlsx的第1列;

在li 标签内定位class="detail"的p标签,提取其文字内容,作为图书简介,保存到{book}.xlsx的第2列;

在li 标签内定位class="price">的p标签,然后定期p标签中 class="search_now_price"的span标签,提取其内容,作为图书价格,保存到{book}.xlsx的第3列;

在li 标签内定位name="itemlist-review"的a标签,提取其文字内容,作为图书评论数量,保存到{book}.xlsx的第4列;

在li 标签内定位 class="search_book_author"的p标签,定位p标签中的第1个a标签,提取其 title属性值,作为图书作者,保存到{book}.xlsx的第5列;定位p标签中的第2个a标签,提取其 title属性值,作为图书出版社,保存到{book}.xlsx的第6列;定位p标签中的第2个span标签,提取其内容,作为出版时间,保存到{book}.xlsx的第7列;

注意:

每一步都要输出相关信息到屏幕;

设置请求头,来应对反爬虫机制;

每解析一个网页后,随机等待1-10秒;

如果某个元素不存在,就跳过这个数据点。

DataFrame.append 方法在 pandas 1.4.0 版本中已经被弃用,并且在后续版本中被移除。为了解决这个问题,我们可以使用 concat 函数来代替 append

所有的代码整合在一起,不要一段一段的输出;

第二步,查看审阅deepseek生成的Python代码:
import time

import random

import requests

from bs4 import BeautifulSoup

import pandas as pd

# 设置请求头

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}

# 用户输入关键词

book = input("请输入关键词: ")

# 新建Excel文件路径

excel_file_path = f"F:\\aivideo\\{book}.xlsx"

# 初始化DataFrame

df = pd.DataFrame(columns=['标题', '简介', '价格', '评论数量', '作者', '出版社', '出版时间'])

# 遍历页面

for pagenumber in range(1, 101):

# 打开网页

url = f"https://search.dangdang.com/?key={book}&act=input&page_index={pagenumber}&sort_type=sort_sale_amt_desc#J_tab"

print(f"正在打开网页: {url}")

# 发送HTTP请求

response = requests.get(url, headers=headers)

response.encoding = 'GB2312' # 设置编码为GB2312

# 解析网页

soup = BeautifulSoup(response.text, 'html.parser')

# 定位class="bigimg"的ul标签

ul_tag = soup.find('ul', class_='bigimg')

# 如果ul标签存在,定位所有的li标签

if ul_tag:

li_tags = ul_tag.find_all('li')

# 遍历li标签并提取信息

for li in li_tags:

try:

# 提取图书信息

title = li.find('a', class_='pic').get('title')

description = li.find('p', class_='detail').text.strip()

price = li.find('p', class_='price').find('span', class_='search_now_price').text.strip()

review_count = li.find('a', attrs={'name': 'itemlist-review'}).text.strip()

author = li.find('p', class_='search_book_author').find_all('a')[0].get('title')

publisher = li.find('p', class_='search_book_author').find_all('a')[1].get('title')

publish_time = li.find('p', class_='search_book_author').find_all('span')[1].text.strip()

# 保存到DataFrame

df = pd.concat([df, pd.DataFrame([[title, description, price, review_count, author, publisher, publish_time]],

columns=['标题', '简介', '价格', '评论数量', '作者', '出版社', '出版时间'])],

ignore_index=True)

except AttributeError:

print("跳过一个数据点")

continue

# 随机等待

time.sleep(random.randint(1, 10))

# 保存到Excel文件

df.to_excel(excel_file_path, index=False)

print(f"数据已保存到: {excel_file_path}")

第三步,打开visual studio code软件,新建一个py文件,将Python代码复制到这个文件中,按下F5键运行程序:

程序运行结果:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

5.26机器人基础-DH参数 正解

1.建立DH坐标系 1.确定Zi轴(关节轴) 2.确定基础坐标系 3.确定Xi方向(垂直于zi和zi1的平面) 4.完全确定各个坐标系 例子: 坐标系的布局是由个人决定的,可以有不同的选择 标准坐标系布局: …

HAL库LED点灯

一、搭建开发环境 (一)安装MDK5 具体安装请参照下面链接:如何开始一个stm32的简单程序的编译_stm32程序编译-CSDN博客 (二)安装Jdk 由于STM32CubeMX需要用到JAVA,因此需要安装jdk环境。 jdk官网下载链接…

素数判断的奥秘与编程实践

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、素数定义的深入理解 二、非素数的例子与思考 三、素数判断的编程实现 1. 穷举法判断素…

protobuf —— 认识和安装

protobuf —— 认识和安装 什么是序列化和反序列化有哪些常见的什么是序列化和反序列化工具Protobuf安装安装依赖开始安装 连接动态库一些遗留问题 我们今天来看一个序列化和反序列化的工具:protobuf。 什么是序列化和反序列化 序列化(Serialization&a…

基于SpringBoot和Mybatis实现的留言板案例

目录 一、需求及界面展示 二、准备工作 引入依赖 .yml文件相关配置 数据库数据准备 三、编写后端代码 需求分析 代码结构 Model Mapper Service Controller 前端代码 四、测试 一、需求及界面展示 需求: 1. 输入留言信息,点击提交&…

MySQL:图文超详细教程MySQL5.7下载与安装

一、前言 MySQL 5.7 是一个重要的数据库管理系统版本,它带来了多项改进和新特性,本文将超详细的带大家手动安装一下MySQL5.7。 二、下载MySQL5.7版本 MySQL5.7安装包 链接:https://pan.baidu.com/s/1lz5rp9PwfyeHzkEfI_lW6A 提取码&#…

MyBatis框架的使用:mybatis介绍+环境搭建+基础sql的使用+如何使用Map传入多个参数+返回多个实体用List或者Map接收+特殊sql的使用

MyBatis框架的使用:mybatis介绍环境搭建基础sql的使用如何使用Map传入多个参数返回多个实体用List或者Map接收特殊sql的使用 一、MyBatis介绍1.1 特性1.2 下载地址1.3 和其它持久层技术对比 二、搭建环境2.1配置maven2.2 创建mybatis配置文件2.3 搭建测试环境 三、基…

spring状态机实战

引言 完整代码库gitee地址:代码地址 一、什么是状态机 状态机是有限状态自动机的简称,是现实事物运行规则抽象而成的一个数学模型,是一种概念性机器,它能采取某种操作来响应一个外部事件。这种操作不仅能取决于接收到的事件,还…

如何使用Rust构建Python原生库?注意,不是动态链接库!!!

参考文档:https://github.com/PyO3/pyo3 创建python虚拟环境: conda create --name pyo3 python3.11.7激活虚拟环境: conda activate pyo3安装依赖: pip install maturin初始化项目: maturin init构建项目&#x…

搜索二叉树(C++)

文章目录 1. 搜索二叉树的概念2. 搜索二叉树结构的定义3. 搜索二叉树的操作3.1 搜索二叉树的插入3.2 搜索二叉树的删除3.3 搜索二叉树的查找 4. 完整代码 1. 搜索二叉树的概念 二叉搜索树(Binary Search Tree,简称 BST),又称二叉…

Android Studio 获取 SHA1

以 debug.keystore 调试密钥库为例。 步骤1:明确 debug.keystore 位置 debug.keystore 在 .android 目录下: Windows 用户:C:\Users\用户名\.android\debug.keystore Mac 用户:/Users/用户名/.android/debug.keystore 假设我的…

在Windows中安装Redis

一、下载Redis github链接:https://github.com/redis-windows/redis-windows/releases 二、安装 解压后点击start.bat文件即可启动服务 新开一个cmd窗口进入安装了Redis的文件夹输入redis-cli.exe -h 127.0.0.1 -p 6379连接Redis,见如下结果便是成功&…

数据结构——链式二叉树知识点以及链式二叉树数据操作函数详解!!

引言:该博客将会详细的讲解二叉树的三种遍历方法:前序、中序、后序,也同时会讲到关于二叉树的数据操作函数。值得一提的是,这些函数几乎都是建立在一个函数思想——递归之上的。这次的代码其实写起来十分简单,用不了几…

【Springboot系列】SpringBoot 中的日志如何工作的,看完这一篇就够了

文章目录 强烈推荐引言Spring Boot 中的日志是怎么工作日志框架选择配置文件日志级别自定义日志配置集成第三方日志库实时监控和日志管理 Log4j2工作原理分析1. 核心组件2. 配置文件3. Logger的继承和层次结构4. 日志事件处理流程5. 异步日志 总结强烈推荐专栏集锦写在最后 强烈…

免费图片文字转换成文本,ocr文字识别软件免费版,真的太实用了!

截屏短视频上一段扎心文字,想把它发到朋友圈怎么办?这时候就需要一个OCR识别软件。 它就像一个聪明的小助手,它可以帮助电脑“看懂”书本上或者图片里的字。就像我们用眼睛看字一样,OCR软件用它的“眼睛”扫描图片,识…

C语言代码错误(一)

今天在写选择排序代码时&#xff0c;在测试数据发现不能显示结果 1、代码如下&#xff1a; #include <stdio.h>int main(void) {int i, j; // 循环变量int MinIndex; // 保存最小的值的下标int buf; // 互换数据时的临时变量int n;printf("你想输入多少个数据n:\n…

乐理学习-音及音名

1. 我觉得练习题很重要。我要得到一个反馈 所以我想没学习完书中的一节就要把练习题做下来&#xff0c;虽然慢点也可以。 2. 做个小计划。 今天计算了一下学完《基本乐理-李重光》如果每天3张。也要80天干完&#xff0c;希望能有一天可以学习7张的速度的时候。 3. 练习记录…

【除自身以外数组的乘积】python

目录 思路&#xff1a; 代码&#xff1a; 思路&#xff1a; 直接计算前缀乘积&#xff0c;后缀乘积&#xff0c;然后相乘即可 开始我还在想&#xff0c;遍历一次i&#xff0c;怎么能同时计算前缀乘积和后缀乘积&#xff0c;事实上分开计算比较方便。。 代码&#xff1a; cl…

Spark运行模式详解

Spark概述 Spark 可以在多种不同的运行模式下执行&#xff0c;每种模式都有其自身的特点和适用场景。 部署Spark集群大体上分为两种模式&#xff1a;单机模式与集群模式。大多数分布式框架都支持单机模式&#xff0c;方便开发者调试框架的运行环境。但是在生产环境中&#xff…

聊聊变异测试

软件质量保障 所寫即所思&#xff5c;一个阿里质量人对测试的所感所悟。 1. 介绍 有句话说&#xff1a;证实容易&#xff0c;证伪难。正如测试一样&#xff0c;证明缺陷存在容易&#xff0c;但证明不存在缺陷难。而变异测试颠覆了这一原则&#xff0c;如果我们知道存在缺陷&am…