那我就为你讲解一下“Python爬虫实战之爬取京东商品数据并实现数据可视化”的完整攻略。
一、爬取京东商品数据
1.1 获取搜索链接
首先,我们需要打开京东首页,在搜索框中输入我们要爬取的商品关键词,比如“小米手机”。然后点击搜索,进入搜索结果页面。
接着,我们需要分析搜索结果页面的url,找到关键词“小米手机”在url中的表现。经过观察,我们发现搜索结果页面的url类似于以下形式:
https://search.jd.com/Search?keyword=小米手机&enc=utf-8&wq=小米手机&pvid=94e9d11f231540f8b1918c02a3b33af9
可以看到,搜索关键词“小米手机”出现在了url的参数中,参数名为“keyword”。
因此,我们可以根据自己的需求,构造出不同的url来进行爬取。
1.2 解析与分析页面
通过上述步骤,我们已经得到了要爬取的页面url。接下来,我们需要使用Python中的requests库发送请求获取页面内容,然后使用BeautifulSoup库进行页面解析。
具体的代码示例:
import requests
from bs4 import BeautifulSoup
url = 'https://search.jd.com/Search?keyword=小米手机&enc=utf-8&wq=小米手机&pvid=94e9d11f231540f8b1918c02a3b33af9'
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'}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
在获取到页面的内容后,我们需要使用BeautifulSoup库进行解析。通常情况下,我们会使用标签和class来定位需要的元素。
比如,我们要获取每个商品的名称和价格,可以根据页面分析,找到每个商品的信息块所在的标签和class:
<div class="gl-i-wrap">
<div class="p-img">
<a target="_blank" title="小米10至尊纪念版 120X双曲面环幕柔性屏 骁龙865+ LPDDR5 UFS3.1高速闪存 120W+大功率有线充 骁龙优选 拍照狂人 12GB+256GB" href="//item.jd.com/100012043808.html" onclick="searchlog(1,100012043808,0,2,'','flagsClk=1073672847')">
<img class="err-product" data-img="1" width="220" height="220" src="//img14.360buyimg.com/n7/jfs/t1/126138/1/12345/65196/5f9f2eb5Ef7f6016e/75fdce52a83c71f5.jpg">
</a>
</div>
<div class="p-price">
<strong class="J_100012043808" data-done="done" data-price="5198.00">¥5198.00</strong>
</div>
...
</div>
通过对上面的代码进行解析,我们可以得到每个商品的名称和价格。
1.3 存储到数据库
在获取到需要的商品数据后,我们可以将其存储到数据库中以备后续分析和使用。
具体的代码示例:
import pymysql
db = pymysql.connect(host='localhost', user='root', password='123456', database='jd', charset='utf8')
cursor = db.cursor()
sql = """
CREATE TABLE IF NOT EXISTS goods (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
price FLOAT
)
"""
cursor.execute(sql)
for product in products:
name = product['name']
price = product['price']
sql = '''insert into goods (name, price) values ('{}',{})'''.format(name, price)
cursor.execute(sql)
db.commit()
在上述代码中,我们首先连接上本地的MySQL数据库,并创建了一个名为“goods”的表。然后,我们遍历所有获取到的商品信息,并将其存储到数据库中。
至此,我们已经完成了京东商品数据的爬取。接下来,我们需要对数据进行分析。
二、实现数据可视化
2.1 连接数据库并获取数据
首先,我们需要连接上数据库,并从中获取需要的数据。
具体的代码示例:
import pymysql
db = pymysql.connect(host='localhost', user='root', password='123456', database='jd', charset='utf8')
cursor = db.cursor()
sql = "select * from goods"
cursor.execute(sql)
data = cursor.fetchall()
在代码中,我们连接上了MySQL数据库,然后执行了一个sql语句来获取数据库中保存的商品数据。最后,我们使用fetchall方法将获取到的数据存储到变量data中。
2.2 利用Matplotlib绘制图表
得到数据后,接下来我们就可以通过使用Matplotlib库来实现数据可视化。
比如,我们可以使用柱状图来对商品价格进行可视化:
import numpy as np
import matplotlib.pyplot as plt
prices = [i[2] for i in data]
names = [i[1] for i in data]
plt.bar(range(len(prices)), prices, tick_label=names, color='rgb')
plt.xticks(rotation=90)
plt.show()
在代码中,我们首先通过获取到的数据,分别得到了商品名称和价格,并将它们分别存储到names和prices变量中。然后,我们使用Matplotlib的bar方法绘制出柱状图,并将商品名称作为横坐标,价格作为纵坐标。最后,我们通过show方法展示出图表。
2.3 利用WordCloud绘制词云图
除了柱状图,我们还可以使用WordCloud库来实现对商品名称的可视化。
具体的代码示例:
from wordcloud import WordCloud
text = ' '.join(names)
wordcloud = WordCloud(font_path='C:/Windows/Fonts/simkai.ttf', background_color='white').generate(text)
plt.imshow(wordcloud)
plt.axis('off')
plt.show()
在上述代码中,我们首先通过join方法将所有的商品名称合并成一个字符串,并存储到变量text中。然后,我们使用WordCloud库的generate方法生成词云图,并设置字体和背景颜色。最后,我们通过imshow和axis方法展示出词云图。
三、示例说明
示例1:实现二手车价格分析和可视化
我们可以通过爬虫程序收集二手车价格数据,并保存到数据库中。然后,通过数据分析和可视化技术,可以找出哪些二手车品牌或车型价格比较高或比较低,从而为人们选择二手车提供更加详尽的参考意见。
具体的分析和可视化方法,可以采用Matplotlib绘制散点图、柱状图和箱型图等数据图形。
示例2:实现电影票房数据分析和可视化
我们可以通过爬虫程序收集电影票房数据,并将数据保存到数据库中。然后,通过数据分析和可视化技术,可以找出哪些电影的票房表现比较好或比较差,从而为电影制片人、发行商或电影院提供更加详尽的参考意见。
具体的分析和可视化方法,可以采用Matplotlib绘制条形图、折线图、散点图、热力图等数据图形。同时,也可以使用WordCloud库分析并展示不同电影名字的热度。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python爬虫实战之爬取京东商品数据并实实现数据可视化 - Python技术站