一、数据获取

使用PyCharm(引用requests库、lxml库、json库、time库、openpyxl库和pymysql库)爬取京东网页相关数据(品牌、标题、价格、店铺等)

数据展示(片段):

京东网页有反爬措施,需要自己在网页登录后,获取cookie,加到请求的header中(必要时引入time库,设置爬取睡眠时间降低封号概率)

爬取代码(片段):

###获取每一页的商品数据
def getlist(url,brand):global count #定义一个全局变量,主要是为了确定写入第几行# url="https://search.jd.com/search?keyword=笔记本&wq=笔记本&ev=exbrand_联想%5E&page=9&s=241&click=1"res = requests.get(url,headers=headers)res.encoding = 'utf-8'# text = (res.text).replace("")text = res.textselector = etree.HTML(text)list = selector.xpath('//*[@id="J_goodsList"]/ul/li')#获取数据所在for i in list:title = i.xpath('.//div[@class="p-name p-name-type-2"]/a/em/text()')[0].strip()#商品名称price = i.xpath('.//div[@class="p-price"]/strong/i/text()')[0]#商品价格shop = i.xpath('.//div[@class="p-shop"]/span/a/text()')[0] #获取店铺名称#获取评论数的id值# product_id = i.xpath('.//[@class="p-commit"]/strong/a/@id')[0].replace("J_comment_","")# comment_count = commentcount(product_id)# print("目前条数="+str(count))

爬取完后直接存入数据库:

# 实现将数据写入到数据库中吗,提前将库和表创建好,创建表结构如下:
"""CREATE TABLE jd.shuju(id INT PRIMARY KEY AUTO_INCREMENT,brand VARCHAR(100) CHARACTER SET utf8,title VARCHAR(100) CHARACTER SET utf8,price VARCHAR(100) CHARACTER SET utf8,shop VARCHAR(100) CHARACTER SET utf8,comment_count VARCHAR(100) CHARACTER SET utf8);
"""conn = pymysql.connect(host='127.0.0.1',user='root',passwd='',port=3306,db='jd',charset='utf8',use_unicode=True
)
# print("连接成功")
cursor = conn.cursor()  # 执行完毕返回的结果集默认以元组显示
# 向sql中插入数据
try:sql = f"insert ignore into shuju111(brand,title,price,shop) values('{brand}','{title}','{price}','{shop}')"cursor.execute(sql)  # 执行SQL语句# print("插入完一条语句")cursor.close()  # 关闭光标对象conn.commit()  # 提交conn.close()  # 关闭数据库
except:print("跳过1次插入")continue
#向表中插入数据
outws.cell(row=count, column=1, value=str(count - 1))  # 从第一行开始
outws.cell(row=count, column=2, value=str(brand))
outws.cell(row=count, column=3, value=str(title))
outws.cell(row=count, column=4, value=str(price))
outws.cell(row=count, column=5, value=str(shop))
# outws.cell(row=count, column=6, value=str(CommentCount))
count = count + 1  # 自动跳入下一行

二、数据处理

对所爬取数据中无关数据进行清洗(符号的替换)

代码部分:

# 调用函数模拟请求获取评论数
def commentcount(product_id):url = "https://club.jd.com/comment/productCommentSummaries.action?referenceIds="+str(product_id)+"&callback=jQuery8827474&_=1615298058081"res = requests.get(url, headers=headers)res.encoding = 'utf-8'   #字符转换text = (res.text).replace("jQuery8827474(","").replace(");","")  #替换掉前面出现的jQuery5597865text = json.loads(text)   #将字符串转换为json格式comment_count = text['CommentsCount'][0]['CommentCountStr']comment_count = comment_count.replace("+", "")#对万进行操作,数据清洗if "万" in comment_count:comment_count = comment_count.replace("万","")comment_count = str(int(comment_count)*10000)return comment_count

三、数据可视化

调用数据库数据利用matplotlib.pyplot进行图像绘制(主要根据品牌、店铺、平均价格进行相关数据可视化)

品牌—数量可视化效果:

代码部分:

#画品牌和数量的图表
plt.title('品牌-数量')
plt.xlabel('品牌')
plt.ylabel('品牌数量')
x = ['联想(lenovo)', 'Apple', '宏碁(acer)', '华为(HUAWEI)', 'ThinkPad', '戴尔(DELL)', '小米(MI)']
y = [count_pp[item] for item in x]
plt.bar(x, y)
plt.show()

店铺—数量可视化效果:

代码部分:

#店铺及数量表
count_dp = {'联想京东自营旗舰店':0,'联想京东自营官方旗舰店':0,'联想商用丽邦专卖店':0,'联想商用融合汇通专卖店':0,'联想扬天京东自营授权旗舰店':0}
sql1 = "select * from shuju where brand = '联想(lenovo)' and id<24"#分析前二十个店铺
cursor.execute(sql1)
results1 = cursor.fetchall()  # 以元组的形式返回
for row in results1:count_dp[row['shop']] += 1
plt.title('店铺-数量')
plt.xlabel('店铺')#横坐标代表含义
plt.ylabel('店铺数量')
x = ['联想京东自营旗舰店','联想京东自营官方旗舰店','联想商用丽邦专卖店','联想商用融合汇通专卖店','联想扬天京东自营授权旗舰店']
y = [count_dp[item] for item in x]
plt.bar(x, y)
plt.show()

品牌—价格可视化效果:

 代码部分:

#根据平均价格分析
plt.title('品牌-价格')
plt.xlabel('品牌')
plt.ylabel('品牌价格')
x = ['联想(lenovo)', 'Apple', '宏碁(acer)', '华为(HUAWEI)','ThinkPad', '戴尔(DELL)', '小米(MI)']
y = [price_total[item]/count_pp[item] for item in x]
plt.bar(x, y)
plt.show()

品牌占比例可视化效果:

 代码部分:

#饼图分析品牌占比
explode = (0,0,0,0.1,0,0,0,0)
candidate = [key for key in count_pp]   #拿取品牌的键名
votes = [value for value in count_pp.values()]   #拿取品牌的键值
plt.figure(figsize=(10, 10), dpi=100)
plt.pie(votes, labels=candidate, explode=explode, autopct="%1.2f%%", shadow=False, startangle=90,textprops={'fontsize':15},labeldistance=1.05)
#labels饼图外侧显示的说明文字,explode为突出某个值,autopct设置百分比小数位,shadow表示阴影,
# startangle起始绘制角度,默认图是从x轴正方向逆时针画起,设定=90则从y轴正方向画起;
# labeldistance:label标记的绘制位置,相对于半径的比例,默认值为1.1, 如<1则绘制在饼图内侧;
plt.legend(loc='upper right',fontsize=6)   #设置图例位置和大小
plt.title("各品牌占比")
plt.axis('equal')
plt.show()

店铺占比例可视化效果:

代码部分:

#画环形饼图
candidate1 = [key for key in count_dp]   #拿取品牌的键名
votes1 = [value for value in count_dp.values()]   #拿取品牌的键值
plt.figure(figsize=(10, 10), dpi=100)
explode1=[0,0,0,0,0]
plt.pie(votes1, labels=candidate1, explode=explode1, autopct="%1.2f%%", shadow=False, startangle=90,textprops={'fontsize':15},pctdistance=0.85,labeldistance=1.05)
plt.pie([1],radius=0.7,colors='w')  #在内部画一个白色的圆
plt.legend(loc='upper left',fontsize=6)
plt.title("各店铺占比")
plt.axis('equal')
plt.show()

四、说明

代码仅提供主要部分,许多功能都可以优化改进,个人水平有限,仅供参考,勿喷谢谢

遇到问题可以多百度!

爬虫案例—京东数据爬取、数据处理及数据可视化(效果+代码)相关推荐

  1. python爬取微博热搜显示到折线图_微博热搜榜前20信息数据爬取进行数据分析与可视化...

    一.设计方案 1.主题式网络爬虫名称:微博热搜榜前20信息数据爬取进行数据分析与可视化 2.爬取内容与数据特征分析:爬取微博热搜榜前20热搜事件.排名与热度,数据呈一定规律排序. 3.设计方案概述:思 ...

  2. python+selenium爬虫,使用selenium爬取热门微博数据

    python爬虫使用selenium爬取热门微博数据 完整代码 from selenium.webdriver import Chrome import time import csvf = open ...

  3. Python爬虫练习五:爬取 2017年统计用区划代码和城乡划分代码(附代码与全部数据)

    本文仅供学习,需要数据的文末有链接下载,请不要重复爬取. 最近工作中,因为统计用区划代码和城乡划分代码更新了最新的2017版,需要爬取最新的数据.于是乎,本次花了一定精力,将整个2017版数据完完整整 ...

  4. 【爬虫案例】Requests爬取豆瓣短评以及入门爬虫注意事项

    一.Requests是什么? Requests 是一个 Python 的 HTTP 客户端库. 支持的 HTTP 特性: 保持活动和连接池.国际域名和URL.Cookie持久性会话 浏览器式SSL验证 ...

  5. 爬虫入门-京东评论爬取和简单分析[学习笔记]

    随便点击一个商品,我点的是"https://item.jd.com/3533885.html" 查看评论是否动态数据:点击改变评论页数(图中1处),网址(图中2处)不会变,说明是动 ...

  6. 爬取携程和蚂蜂窝的景点评论数据\携程评论数据爬取\旅游网站数据爬取

    本人长期出售超大量微博数据.旅游网站评论数据,并提供各种指定数据爬取服务,Message to YuboonaZhang@Yahoo.com.同时欢迎加入社交媒体数据交流群:99918768 前言   ...

  7. python数据爬取疫情实时数据

    jupyter笔记本 交互性强,可以代码块执行 一.数据爬取 网站:实时更新:新冠肺炎疫情最新动态 1. 导入所需库 #导入库 import time import json import reque ...

  8. Python爬虫案例3:爬取房天下房价等各种信息

    爬取房天下网站,爬取的内容: 区域.小区名.总价.房型.面积.单价.朝向.楼层位置.装修情况.建筑时间.是否有电梯.产权类型.住宅类型.发布日期 信息保存:保存在csv中 数据结果: 1.先建立爬虫项 ...

  9. Python爬虫案例:简单爬取肯德基餐厅位置信息

    目录 代码 成功获取的数据预览 代码 # Python爬虫简单例子 # 爬取肯德基餐厅位置信息 # 仅供学习交流!import requests;# 判断是否是当前文件运行 if __name__ = ...

  10. python爬虫案例——根据网址爬取中文网站,获取标题、子连接、子连接数目、连接描述、中文分词列表

    全栈工程师开发手册 (作者:栾鹏) python教程全解 其中使用到了urllib.BeautifulSoup爬虫和结巴中文分词的相关知识. 调试环境python3.6 # 根据连接爬取中文网站,获取 ...

最新文章

  1. LeetCode刷题记录6——696. Count Binary Substrings(easy)
  2. .Net开发时有没有好的页面开发框架?
  3. python3根据地址批量获取百度地图经纬度
  4. ST17H26使用tea注意事项
  5. AutoML:机器学习的下一波浪潮
  6. axure web组件下载_实践干货:Axure插入图标的4种办法
  7. 如何在10分钟内让Redux发挥作用
  8. Tomcat URL重写
  9. Matlab实用代码——定位文件位置,自动导入文件
  10. 2012禁用ip隧道 win_IMCP协议的魅力——IMCP隧道
  11. Ubuntu搜狗输入法ctrl+alt+b冲突解决
  12. 2. PHP 编译安装
  13. mysql 删除创建表分区,MySQL分区表创建,分区创建、删除示例
  14. sun键盘没有stop键_【转帖】SUN基础知识
  15. pixel 更新系统
  16. React Hooks 详解
  17. 13、Nepxion Discovery 之 全链路调用链监控
  18. 好用的android app,6款好用的Android手机App
  19. Python网络爬虫实践简答题
  20. UKF无迹卡尔曼滤波

热门文章

  1. PostgreSQL数据库导入EXCEL数据表
  2. 实验四:组合电路设计实验之一 (血型关系通过逻辑电路的实现)
  3. 记一次windows 10 无法升级问题的处理(系统盘MBR转GPT)
  4. 5G通信技术解读:波束成形如何为5G添翼?
  5. 你算过这笔账么?月薪5000在中国和美国的生活各是怎样?
  6. TOJ 5238: C实验:变量交换函数
  7. 命令行修改文件md5
  8. STM32芯片烧录后上电不运行
  9. MFC修改图标简单方法(包括exe图标,任务栏图标,应用程序运行左上角图标)
  10. Java 生成随机中文、英文姓名(下)