当前位置: 首页 > news >正文

【Python实战】爬虫教程千千万,一到实战全完蛋?今天手把手教你一键采集某网站图书信息数据啦~排名第一的竟是...(爬虫+数据可视化)

前言

​一本本书,是一扇扇窗,为追求知识的人打开认知世界的窗口

一本本书,是一双双翅膀,让追求理想的人张开翅膀翱翔

所有文章完整的素材+源码都在👇👇

粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。

前面写了一篇文章关于爬虫的系列内容一步一步教大家写一个完整的GUI小说下载神器。

这一期想给大家趴一趴外甥女想买的书籍,因为前几天学校让买课外书籍,这不?

网上的书籍太多了,想让我参考一下,正好今天有时间研究了一下,直接批量下载了一些,看

看那些评论好,对比一下再买!

今天就给大家一步步分析一下是我是如何爬取数据,采集某网站的书籍并做一个数据分析滴~

正文

一、准备环境

 1)环境安装

本文用到的环境如下—— 

 Python3、Pycharm社区版,requests、parsel、自带的库只 要安装完 Python就可 以直接使

用了, 需要安装 的库的话看教程下🎐

一般安装:pip install +模块名 镜像源安装:pip install -i https://pypi.douban.com/simple/+模块名 (之前有说过安装报错的几种方式跟解决方法,不会安装的可以去看下,还有很多国内镜像源 也有文章的)

二、安装问题

何配置pycharm里面的python解释器? 

 1. 选择file(文件) >>> setting(设置) >>> Project(项目) >>> python interpreter(python解释器) 。2. 点击齿轮, 选择add 。3. 添加python安装路径 。

pycharm如何安装插件? 

1. 选择file(文件) >>> setting(设置) >>> Plugins(插件) 。2. 点击 Marketplace 输入想要安装的插件名字 比如:翻译插件 输入 translation / 汉化插件 输入 Chinese 。3. 选择相应的插件点击 install(安装) 即可 。4. 安装成功之后 是会弹出 重启pycharm的选项 点击确定, 重启即可生效。

三、数据来源分析 

 1. 明确需求: - 采集的网站是什么?

http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-recent7-0-0-1-1 - 

采集的数据是什么? 书籍相关的数据内容: 名字/价格/评价/推荐/作者.... 

 2. 分析书籍信息在那个数据包

<请求那个url地址>里面 通过开发者工具进行抓包分析 。- 打开开发者工具: F12 / 鼠标右键点击检查选择network 刷新网页: 让网页数据内容重新加载一遍 <F5/ctrl+R> 搜索功能: 通过关键字<你要的数据>去搜索查询相对应的数据包 。由上述可得: 请求这个: http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-recent7-0-0-1-1 就可以得到相应书籍信息。

四、代码展示

1)主程序

# 导入数据请求模块 --> 第三方模块 需要安装 pip install requests
import requests  # 灰色不是报错, 而是导入模块没有使用
# 导入数据解析模块 --> 第三方模块 需要安装 pip install parsel
import parsel
# 导入csv表格模块 --> 内置模块, 不需要安装
import csv# 创建文件对象
"""
data.csv <文件名> 代码在哪里就保存在哪里
mode='a' 保存方式, 追加保存
encoding='utf-8' 编码格式
newline='' 换行
f --> 文件对象
fieldnames --> 字段名, 表头
如何批量替换:1. 选择替换内容 ctrl + R 2. 勾选上 .* <正则>3. 输入正则命令:.*,
"""
f = open('data.csv', mode='a', encoding='utf-8-sig', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['标题','评论','推荐','作者','时间','出版社','售价','原价','折扣','电子书','详情页',
])
# 写入表头
csv_writer.writeheader()
"""
1. 发送请求, 模拟浏览器对于url地址发送请求- 安装模块1. win + R 输入cmd 输入安装命令2. 点击pycharm终端, 输入安装命令如果觉得安装速度太慢可以换源- 把python代码伪装成浏览器去发送请求headers请求头 --> 字典数据类型, 要构建完整键值对- 自定义变量不以数字开头, 不建议用关键字命名其他你喜欢就好多页的数据采集 --> 分析请求链接变化规律第一页: http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-recent7-0-0-1-1第二页: http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-recent7-0-0-1-2第三页: http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-recent7-0-0-1-3"""
for page in range(1, 26):# 包含1 但是不包含26# 请求链接url = f'http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-recent7-0-0-1-{page}'# 伪装模拟 --> 70%左右网站加User-Agent 就可以了, 如果不行, 你加其他 cookie host refererheaders = {# User-Agent 用户代理, 表示浏览器基本身份信息'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'}# 发送请求# 调用requests模块里面get请求方法, 对于url地址发送请求, 并且携带上headers请求头伪装, 最后用自定义变量response接收返回数据response = requests.get(url=url, headers=headers)"""2. 获取数据, 获取服务器返回响应数据开发者工具: response <网页源代码>response<响应对象>.text<文本> --> 获取响应的文本数据 <html字符串数据类型>3. 解析数据, 提取我们想要的数据内容- 书籍基本信息解析方法:re正则 --> 对于字符串数据直接进行解析提取css选择器 --> 根据标签属性内容提取数据 xpath --> 根据标签节点提取数据早退是没有资料没有录播, 课后会签到, 找助理老师获取录播 代码也可以分两次提取:- 第一次提取所有书籍信息- 第二次提取具体每一本书籍内容"""# 把获取下来html字符串数据<response.text>, 转换成可解析对象selector = parsel.Selector(response.text)  # <Selector xpath=None data='<html xmlns="http://www.w3.org/1999/x...'># 提取所有li标签 --> 会复制就可以了lis = selector.css('.bang_list_mode li')  # --> 返回列表, 列表里面元素是Selector对象 lis[0] 索引取值, 提取第一个元素# 把列表里面元素一个一个提取出来 --> for循环遍历for li in lis:""".name a --> 定位一个class类名为name下面a标签a::attr(title) --> 获取a标签里面title属性attr() --> 获取属性get() --> 获取第一个标签数据, 返回字符串数据类型.tuijian::text --> 获取文本div:nth-child(6) --> 第6个div标签css选择器/xpath/re 在系统课程里面 三节课, 7.5个小时才讲完 --> 理论+案例跟着老师系统学, 有问题随便问, 知识也会教"""title = li.css('.name a::attr(title)').get()  # 提取标题comment = li.css('.star a::text').get()  # 提取评论recommend = li.css('.tuijian::text').get()  # 提取推荐author = li.css('.publisher_info a::attr(title)').get()  # 提取作者date = li.css('.publisher_info span::text').get()  # 时间press = li.css('div:nth-child(6) a::text').get()  # 出版社price_n = li.css('.price .price_::text').get()  # 售价price_r = li.css('.price .price_r::text').get()  # 原价price_s = li.css('.price .price_s::text').get()  # 折扣price_e = li.css('.price_e .price_n::text').get()  # 电子书href = li.css('.name a::attr(href)').get()  # 详情页# 以字典方式保存数据dit = {'标题': title,'评论': comment,'推荐': recommend,'作者': author,'时间': date,'出版社': press,'售价': price_n,'原价': price_r,'折扣': price_s,'电子书': price_e,'详情页': href,}# 写入数据csv_writer.writerow(dit)print(title, comment, recommend, author, date, press, price_n, price_r, price_s, price_e, href)

2)效果展示

爬取数据——

​保存到表格——

数据可视化——

可视化的代码很多这里就不一一展示了。

总结

好啦!今天的文章内容写到这里就结束了哈,想学习的可以找我啦~

✨完整的素材源码等:可以滴滴我吖!或者点击文末hao自取免费拿的哈~

 🔨推荐往期文章——

项目0.9  【Python实战】WIFI密码小工具,甩万能钥匙十条街,WIFI任意连哦~(附源码)

项目1.0  【Python实战】再分享一款商品秒杀小工具,我已经把压箱底的宝贝拿出来啦~

项目0.7  【Python爬虫实战】 不生产小说,只做网站的搬运工,太牛逼了~(附源码)

项目0.8  【Python抢票神器】火车票枪票软件到底靠谱吗?实测—终极攻略。

项目1.2

【Python实战】如果没有音乐,生活就是一个错误 :n首回味无穷的歌,总有一曲深得你心哦~

项目1.3 

【Python实战】美哭你的极品壁纸推荐|1800+壁纸自动换?美女动漫随心选(高清无码)

🎁文章汇总——

Python文章合集 | (入门到实战、游戏、Turtle、案例等)

(文章汇总还有更多你案例等你来学习啦~源码找我即可免费!)

相关文章:

【Python实战】爬虫教程千千万,一到实战全完蛋?今天手把手教你一键采集某网站图书信息数据啦~排名第一的竟是...(爬虫+数据可视化)

前言 ​一本本书&#xff0c;是一扇扇窗&#xff0c;为追求知识的人打开认知世界的窗口 一本本书&#xff0c;是一双双翅膀&#xff0c;让追求理想的人张开翅膀翱翔 所有文章完整的素材源码都在&#x1f447;&#x1f447; 粉丝白嫖源码福利&#xff0c;请移步至CSDN社区或文末…...

【数据结构】堆的详解

本章的知识需要有树等相关的概念&#xff0c;如果你还不了解请先看这篇文章:初识二叉树 堆的详解一、二叉树的顺序结构及实现1、二叉树的顺序结构2、堆的概念及结构二、堆的简单实现 (以大堆为例)1、堆的定义2、堆的初始化3、堆的销毁4、堆的打印5、堆的插入6、堆顶元素的获取7…...

New Bing怼人、说谎、PUA,ChatGPT已经开始胡言乱语了

最近&#xff0c;来自大洋彼岸那头的ChatGPT科技浪潮席卷而来&#xff0c;微软将chatGPT整合搜索引擎Bing开启内测后&#xff0c;数百万用户蜂拥而至&#xff0c;都想试试这个「百事通」。 赶鸭子上架&#xff0c;“翻车”了&#xff1f; 但短短上线十几天&#xff0c;嵌入了…...

简易计算器-课后程序(JAVA基础案例教程-黑马程序员编著-第十一章-课后作业)

【案例11-2】 简易计算器 【案例介绍】 1.案例描述 本案例要求利用Java Swing 图形组件开发一个可以进行简单的四则运算的图形化计算器。 2.运行结果 运行结果 【案例分析】 要制作一个计算器&#xff0c;首先要知道它由哪些部分组成&#xff0c;如下图所示&#xff1a; 一…...

chatGPT使用:询问简历和面试相关话题(持续更新中)

chatGPT使用:询问简历和面试相关话题 写一份Java简历,价值2万元包装上面的Java简历面试自我介绍面试简述稿包装简历的方法技巧如何进行良好的自我介绍如何写一份优秀的面试简述稿如何写一份优秀的简历如何写一份优秀的面试讲述稿如何提高面试录取率如何拿到offer写一份Java简…...

Java的 Stream流

Stream流&#xff1f;结合Lambda表达式&#xff0c;用于简化集合和数组操作的API。Stream流的一个小例子&#xff1a;创建一个集合&#xff0c;存储多个姓名&#xff0c;把集合中所有以"张"开头的长度为3的元素存储到一个新的集合并输出。List<String> namesne…...

FL Studio 21 中文正式版发布支持多种超个性化主题

万众期待的 FL Studio 21 版本正式发布上线&#xff0c;目前在紧锣密鼓的安排上线中&#xff0c;届时所有购买正版 FL Studio 的用户&#xff0c;都可以免费升级到21版&#xff01; 按照惯例&#xff0c;本次新版也会增加全新插件&#xff0c;来帮助大家更好地创作。今天先给大…...

【微信小程序】-- 全局配置 -- window - 导航栏(十五)

&#x1f48c; 所属专栏&#xff1a;【微信小程序开发教程】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &…...

Spring中最常用的11个扩展点

前言我们一说到spring&#xff0c;可能第一个想到的是 IOC&#xff08;控制反转&#xff09; 和 AOP&#xff08;面向切面编程&#xff09;。没错&#xff0c;它们是spring的基石&#xff0c;得益于它们的优秀设计&#xff0c;使得spring能够从众多优秀框架中脱颖而出。除此之外…...

网络协议丨HTTPS是什么?

我们都知道HTTP协议&#xff0c;那什么是HTTPS&#xff1f; 我们都知道&#xff0c;HTTP有两个缺点——“明文”和“不安全”仅凭 HTTP 自身是无力解决的&#xff0c;需要引入新的 HTTPS 协议。 由于 HTTP 天生“明文”的特点&#xff0c;整个传输过程完全透明&#xff0c;任…...

Anaconda常用命令总结,anaconda、conda、miniconda的关系

Anaconda、conda、miniconda的关系 Anaconda Anaconda 是一个用于数据科学&#xff0c;机器学习和深度学习的开源软件包管理系统&#xff0c;其中包括了许多流行的 Python 包和工具Anaconda主要用于科学计算和数据分析。 conda Conda 是 Anaconda 中的包管理器&#xff0c;…...

【蓝桥杯入门到入土】最基础的数组你真的掌握了吗?

文章目录一&#xff1a;数组理论基础二&#xff1a;数组知识点总结三&#xff1a;数组这种数据结构的优点和缺点是什么&#xff1f;四&#xff1a;实战解题1. 移除元素暴力解法双指针法2.有序数组的平方暴力解法双指针法最后说一句一&#xff1a;数组理论基础 首先要知道数组在…...

Java Set系列集合(Collections集合工具类、可变参数)

目录Set系列集系概述HashSet集合元素无序的底层原理&#xff1a;哈希表HashSet集合元素去重复的底层原理LinkedHashSet有序实现原理TreeSetCollection集合总结可变参数Collections集合工具类Set系列集系概述 Set系列集合特点 无序&#xff1a;存取顺序不一致不重复&#xff1…...

chromium构建原生AS项目-记录1

构建的chromium版本&#xff1a;待补充重要说明&#xff1a;so文件加载的过程文件&#xff1a;base_java.jar包文件路径&#xff1a;org.chromium.base.library_loader.LibraryLoader方法&#xff1a;loadAlreadyLocked&#xff08;Context context&#xff09;line166 :Native…...

Mybatis-Plus 开发提速器:mybatis-plus-generator-ui

Mybatis-Plus 开发提速器&#xff1a;mybatis-plus-generator-ui 1.简介 github地址 &#xff1a; https://github.com/davidfantasy/mybatis-plus-generator-ui 提供交互式的Web UI用于生成兼容mybatis-plus框架的相关功能代码&#xff0c;包括Entity,Mapper,Mapper.xml,Se…...

李迟2023年02月工作生活总结

本文为 2023 年 2 月工作生活总结。 研发编码 Linux Go 某工程使用到一些数据的统计&#xff0c;为方便&#xff0c;使用 map 存储数量&#xff0c;由于其是无序的&#xff0c;输出的列表顺序不固定&#xff0c;将其和历史版本对比不方便&#xff0c;所以需要将 key 排序再输…...

【Python百日进阶-Web开发-Vue3】Day542 - Vue3 商城后台 02:Windi CSS 与 Vue Router4

文章目录 一、WindiCSS 初始1.1 WindiCSS 是什么?1.2 为什么选择 Windi CSS?1.3. 基础用法1.4 集成二、简单按钮2.1 设置背景色2.2 设置字体颜色和上下左右padding2.3 设置圆角2.4 鼠标悬浮,颜色加深2.5 鼠标划入动画2.6 设置阴影2.7 @apply 抽离class代码到 style 块中三、…...

Jupyter Lab | “丢下R,一起来快乐地糟蹋服务器!”

写作前面 工具永远只是为了帮助自己提升工作效率 —— 沃兹基硕得 所以说&#xff0c;为什么要使用jupyterlab呢&#xff1f;当然是因为基于服务器来处理数据就可以使劲造了&#xff0c;而且深切地感觉到&#xff0c;“R这玩意儿是人用的吗”。 jupyter-lab | mamba安装以及…...

分页与分段

前面我们分析了虚拟地址和物理地址 我们这里进行一个简单的分析 这个是程序运行时的地址映射 那么这些碎片&#xff0c;我们现在的操作系统究竟如何处理呢&#xff1f; 我们再引入一个实际问题 我们如何把右边的进程p塞入左边的内存空间里面 有一种方法将p5kill掉&#xff…...

【UE4 】制作螺旋桨飞机

一、素材资源链接&#xff1a;https://pan.baidu.com/s/1xPVYYw05WQ6FABq_ZxFifg提取码&#xff1a;ivv8二、课程视频链接https://www.bilibili.com/video/BV1Bb411h7qw/?spm_id_from333.337.search-card.all.click&vd_source36a3e35639c44bb339f59760641390a8三、最终效果…...

五.家庭:亲情背后有理性

5.1经济学帝国主义【单选题】以下属于经济学研究范围的是&#xff08; &#xff09;。A、约束最优化B、稀缺资源配置C、价格竞争与非价格竞争D、以上都对我的答案&#xff1a;D【多选题】为何有学科分类?A、分工B、专业化C、累积创新D、科技进步我的答案&#xff1a;ABCD【判断…...

【Leedcode】栈和队列必备的面试题(第三期)

【Leedcode】栈和队列必备的面试题&#xff08;第三期&#xff09; 文章目录【Leedcode】栈和队列必备的面试题&#xff08;第三期&#xff09;一、题目&#xff08;用两个栈实现队列&#xff09;二、思路图解1.定义两个栈2.初始化两个数组栈3. 将数据放入pushST数组栈中4.删除…...

《图机器学习》-GNN Augmentation and Training

GNN Augmentation and Training一、Graph Augmentation for GNNs1、Feature Augmentation2、Structure augmentation3、Node Neighborhood Sampling一、Graph Augmentation for GNNs 之前的假设&#xff1a; Raw input graph computational graph&#xff0c;即原始图等于计算…...

【Node.js算法题】数组去重、数组删除元素、数组排序、字符串排序、字符串反向、字符串改大写 、数组改大写、字符替换

文章目录前言数组去重数组删除元素数组排序字符串排序字符串反向字符串改大写数组改大写字符替换字符替换运行结果&#xff1a; ![在这里插入图片描述](https://img-blog.csdnimg.cn/8ac1c15e6f0944cdb8ca50bcb844182a.png)总结前言 本期文章是js的一些算法题&#xff0c;包括…...

Win10系统开始菜单无法点击解决方法分享

Win10系统开始菜单无法点击解决方法分享。有用户电脑一开机之后&#xff0c;就出现了开始菜单无法正常点击的情况。我们很多设置项都是通过开始菜单来进行开启的。那么这个功能无法点击了怎么办呢&#xff1f;接下来我们一起来看看以下的解决方法分享吧。 方法一&#xff1a; 1…...

libmodbus从linux访问window上的服务超时问题

window&#xff1a;使用EasyModbusTCP Server Simulator 作为服务。linux:程序&#xff1a;#include <stdio.h> #include <modbus/modbus.h>int main() {modbus_t *ctx;uint16_t holding_registers[1];// Create a new Modbus TCP contextctx modbus_new_tcp(&quo…...

挑战图像处理100问(26)——双线性插值

双线性插值是一种常用的图像插值方法&#xff0c;用于将低分辨率的图像放大到高分辨率。它基于一个假设&#xff1a;在两个相邻像素之间的值是线性的。 双线性插值考察444邻域的像素点&#xff0c;并根据距离设置权值。虽然计算量增大使得处理时间变长&#xff0c;但是可以有效…...

NXP iMX8系列处理器Pin Multiplexing定义说明

By Toradex秦海1). 简介为了提高处理器的设计灵活性和可用性&#xff0c;NXP的所有i.MX系列处理器都配备了基于 IOMUX Controller (IOMUXC)和IOMUX来使能Pin Mux功能&#xff0c;使得一个特定的IO管脚可以选择不同的可能多达8种的功能定义模块(ALT0, ALT1, ALT2, ALT3...)&…...

用Python的Supervisor進行進程監控以及自動啓動

python 限制同一时间只执行一个 作服務器端開發的同窗應該都對進程監控不會陌生&#xff0c;最近剛好要更換 uwsgi 爲 gunicorn&#xff0c;而gunicorn又剛好有這麼一章講進程監控&#xff0c;因此多研究了下。python 結合以前在騰訊工做的經驗&#xff0c;也會講講騰訊的服務…...

Centos和Window系统下Frp内网穿透

frp 是一个高性能的内网穿透的反向代理软件&#xff0c;支持 TCP、UDP、HTTP、HTTPS 等常见协议(TCP最常用)&#xff0c;可以将处于局域网或者家用电脑主机、办公电脑主机通过中转服务器的方式暴露在公网里&#xff0c;使用户可以通过访问公网的IP&#xff08;域名&#xff09;…...

四川建设网有限责任公司招聘/宁波网站seo诊断工具

说明&#xff1a;这里提供了简单的压测与高可用集群思路&#xff0c;因为时间问题&#xff0c;笔者并没有详细测试并搭建高可用集群。 rabbitMq压测方案 rabbitmq压测性能代码 public class Send2 {//消息队列名称private final static String QUEUE_NAME "helloword2…...

怎样给一个网站做专题策划/seo关键词推广方式

1 点击我搭好私有云 2 下载aria2服务 Aria2是个开源下载工具 它可用在 linux windows系统上 通常在linux上使用较多 它在linux上相比wget下载更灵活 它支持下载http、ftp、BT、磁力链接等 下面这个文章写一个完整windows系统下载使用Aria2 下载Aria2 1、下载Aria2源程序 Gi…...

建设部网站有建筑施工分包/商品seo优化是什么意思

原文&#xff1a;http://coolketang.com/staticOffice/5a97f1019f54542163dc2f49.html 1. 本节课将为您演示&#xff0c;如何给当前的工作表添加背景图片&#xff0c;以增加工作表的趣味性和亲和力。首先点击[页面布局]选项卡&#xff0c;显示页面布局功能面板。 2. 在页面设置…...

自学网站查分数/长春最新发布信息

课程描述 这门课是对自然语言处理(NLP)详细介绍&#xff0c;自然语言处理是对能够用人类语言处理、理解或交流的计算系统的研究。该课程涵盖了基本方法&#xff0c;主要是机器学习和深度学习&#xff0c;用于整个自然语言处理领域&#xff0c;以及一套历史和当代的自然语言处理…...

网站制作的流程包括哪些/互联网营销推广渠道

开发环境(蓝色粗体字为特别注意内容) 1、软件环境&#xff1a; Win7 Ultimate sp1、jdk7u45 2、参考文献&#xff1a;https://www.cnblogs.com/jack1208-rose0203/p/5713210.html private static final byte[] ARRAY_CIRCLE { 0x3c, 0x7e, 0xff, 0xff, 0xff, 0xff…...

网站开发接单平台/竞价培训

作用域闭包递归 &#xff08;自己调自己&#xff09; 简单闭包 function parent() {var x parentfunction son() {var x sonreturn x}return son() } parent() //son闭包写法&#xff1a; /*写法一*/ function parent() {var x parentreturn function son() {var x …...