Python怎么爬取当网书籍数据并数据可视化展示
发表于:2024-11-28 作者:千家信息网编辑
千家信息网最后更新 2024年11月28日,Python怎么爬取当网书籍数据并数据可视化展示,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、开发环境Python
千家信息网最后更新 2024年11月28日Python怎么爬取当网书籍数据并数据可视化展示
Python怎么爬取当网书籍数据并数据可视化展示,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
一、开发环境
Python 3.8
Pycharm 2021.2 专业版
二、模块使用
csv
模块 把爬取下来的数据保存表格里面的 内置模块requests >>> pip install requests
数据请求模块parsel >>> pip install parsel
数据解析模块 css选择器去提取数据
三、爬虫代码实现步骤
导入所需模块
发送请求, 用
python
代码模拟浏览器发送请求解析数据, 提取我们想要数据内容
多页爬取
保存数据, 保存
csv
表格里面
1. 导入所需模块
import requests # 数据请求模块 第三方模块 需要 pip install requestsimport parsel # 数据解析模块 第三方模块 需要 pip install parselimport csv # 保存csv表格数据模块 内置模块import time # 时间模块
2. 发送请求, 用python代码模拟浏览器发送请求
headers
请求头 作用就是python
代码伪装成浏览器 对于服务器发送请求
User-Agent
用户代理 浏览器的基本身份标识
标题中无效的返回字符或前导空格:User-Agent
不要留有空格
通过requests
模块里面get请求方法,对于url地址发送请求,并且携带上面header
请求头参数,最后用response
变量接收返回数据
url = f'http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-24hours-0-0-1-{page}'# headers 请求头 字典数据类型headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'}response = requests.get(url=url, headers=headers)
3. 解析数据, 提取我们想要数据内容
selector = parsel.Selector(response.text) # 对于获取到的html字符串数据进行转换 selector 对象# css选择器 就是根据标签属性提取相应的数据lis = selector.css('ul.bang_list li')for li in lis: # .name 定位 class类名name标签 a 标签 attr() 属性选择器 取a标签里面title属性 get() 获取数据 title = li.css('.name a::attr(title)').get() # 书名 # 获取标签里面文本数据 直接text comment = li.css('.star a::text').get().replace('条评论', '') # 评论 recommend = li.css('.star .tuijian::text').get().replace('推荐', '') # 推荐 author = li.css('.publisher_info a:nth-child(1)::attr(title)').get() # 作者 publish = li.css('div:nth-child(6) a::text').get() # 出版社 price_n = li.css('.price .price_n::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 .price_e .price_n::text').get() # 电子书价格 href = li.css('.name a::attr(href)').get() # 详情页 dit = { '书名': title, '评论数': comment, '推荐量': recommend, '作者': author, '出版社': publish, '售价': price_n, '原价': price_r, '折扣': price_s, '电子书价格': price_e, '详情页': href, } csv_writer.writerow(dit) # 数据保存到csv print(title, comment, recommend, author, publish, price_n, price_r, price_s, price_e, href, sep=' | ')
4. 多页爬取
for page in range(1, 26): # 字符串格式化方法 print(f'正在爬取第{page}页的数据内容') time.sleep(1.5) url = f'http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-24hours-0-0-1-{page}'
5. 保存数据, 保存csv表格里面
# 创建打开一个文件 进行保存f = open('当当图书.csv', mode='a', encoding='utf-8', newline='')csv_writer = csv.DictWriter(f, fieldnames=[ '书名', '评论数', '推荐量', '作者', '出版社', '售价', '原价', '折扣', '电子书价格', '详情页',])csv_writer.writeheader() # 写入表头
运行代码,效果如下图:
四、数据可视化
1.导入所需模块
import pandas as pdfrom pyecharts.charts import *from pyecharts.globals import ThemeType#设定主题from pyecharts.commons.utils import JsCodeimport pyecharts.options as opts
2.导入数据
df = pd.read_csv('书籍信息.csv', encoding='utf-8', engine='python')df.head()
3.可视化
书籍总体价格区间:
pie1 = ( Pie(init_opts=opts.InitOpts(theme='dark',width='1000px',height='600px')) .add('', datas_pair_1, radius=['35%', '60%']) .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%")) .set_global_opts( title_opts=opts.TitleOpts( title="当当网书籍\n\n原价价格区间", pos_left='center', pos_top='center', title_textstyle_opts=opts.TextStyleOpts( color='#F0F8FF', font_size=20, font_weight='bold' ), ) ) .set_colors(['#EF9050', '#3B7BA9', '#6FB27C', '#FFAF34', '#D8BFD8', '#00BFFF', '#7FFFAA']))pie1.render_notebook()
pie1 = ( Pie(init_opts=opts.InitOpts(theme='dark',width='1000px',height='600px')) .add('', datas_pair_2, radius=['35%', '60%']) .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%")) .set_global_opts( title_opts=opts.TitleOpts( title="当当网书籍\n\n售价价格区间", pos_left='center', pos_top='center', title_textstyle_opts=opts.TextStyleOpts( color='#F0F8FF', font_size=20, font_weight='bold' ), ) ) .set_colors(['#EF9050', '#3B7BA9', '#6FB27C', '#FFAF34', '#D8BFD8', '#00BFFF', '#7FFFAA']))pie1.render_notebook()
各个出版社书籍数量柱状图:
bar=( Bar(init_opts=opts.InitOpts(height='500px',width='1000px',theme='dark')) .add_xaxis(counts.index.tolist()) .add_yaxis( '出版社书籍数量', counts.values.tolist(), label_opts=opts.LabelOpts(is_show=True,position='top'), itemstyle_opts=opts.ItemStyleOpts( color=JsCode("""new echarts.graphic.LinearGradient( 0, 0, 0, 1,[{offset: 0,color: 'rgb(255,99,71)'}, {offset: 1,color: 'rgb(32,178,170)'}]) """ ) ) ) .set_global_opts( title_opts=opts.TitleOpts( title='各个出版社书籍数量柱状图'), xaxis_opts=opts.AxisOpts(name='书籍名称', type_='category', axislabel_opts=opts.LabelOpts(rotate=90), ), yaxis_opts=opts.AxisOpts( name='数量', min_=0, max_=29.0, splitline_opts=opts.SplitLineOpts(is_show=True,linestyle_opts=opts.LineStyleOpts(type_='dash')) ), tooltip_opts=opts.TooltipOpts(trigger='axis',axis_pointer_type='cross') ) .set_series_opts( markline_opts=opts.MarkLineOpts( data=[ opts.MarkLineItem(type_='average',name='均值'), opts.MarkLineItem(type_='max',name='最大值'), opts.MarkLineItem(type_='min',name='最小值'), ] ) ))bar.render_notebook()
书籍评论数最高Top20:
bar=( Bar(init_opts=opts.InitOpts(height='500px',width='1000px',theme='dark')) .add_xaxis(price_top.index.tolist()) .add_yaxis( '书籍单价', price_top.values.tolist(), label_opts=opts.LabelOpts(is_show=True,position='top'), itemstyle_opts=opts.ItemStyleOpts( color=JsCode("""new echarts.graphic.LinearGradient( 0, 0, 0, 1,[{offset: 0,color: 'rgb(255,99,71)'}, {offset: 1,color: 'rgb(32,178,170)'}]) """ ) ) ) .set_global_opts( title_opts=opts.TitleOpts( title='单价最高的书籍详细柱状图'), xaxis_opts=opts.AxisOpts(name='书籍名称', type_='category', axislabel_opts=opts.LabelOpts(rotate=90), ), yaxis_opts=opts.AxisOpts( name='单价/元', min_=0, max_=1080.0, splitline_opts=opts.SplitLineOpts(is_show=True,linestyle_opts=opts.LineStyleOpts(type_='dash')) ), tooltip_opts=opts.TooltipOpts(trigger='axis',axis_pointer_type='cross') ) .set_series_opts( markline_opts=opts.MarkLineOpts( data=[ opts.MarkLineItem(type_='average',name='均值'), opts.MarkLineItem(type_='max',name='最大值'), opts.MarkLineItem(type_='min',name='最小值'), ] ) ))bar.render_notebook()
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。
数据
模块
书籍
价格
出版社
出版
代码
标签
评论
内容
原价
售价
数量
浏览器
表格
推荐
浏览
可视化
书名
作者
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
千汇网络技术有限公司
怎么使用服务器
网络安全是哪个行业
青浦区通信网络技术有哪些
能够远程电脑不能连接数据库
服务器玩家只能加入ct
电脑玩你画我猜无法连接服务器
从化专业的网络数据库维护
数字社会保障网络安全
颗粒广告数据库5秒
电脑的文件怎么上传到服务器上
数据库角色员工权限
做期货软件开发
铜陵求职招聘软件开发公司
网络技术员网名
csgo 中国服务器
软件开发宣传画册封面
数据库隐式转换造成索引失效
网络安全法 澳门
第五人格优化服务器
数据库技术是怎样的存在
金融安全数据库
手机服务器连接慢是怎么回事
徐汇区数据软件开发制品价格
地税查未申报数据库
服务器维护简历
数据库中的文件怎么导出来
衡阳哪里有软件开发服务
嵌入式软件开发区烧烤的做法
数据库连接池都有哪些