爬爬月饼销量,并数据可视化
后端功能部分from selenium import webdriver
importtime
import csv
'''搜索商品功能'''
def get_product(key):
driver.find_element_by_css_selector('#key').send_keys(key)
driver.find_element_by_css_selector('.button').click()
#进入一个页面(加载耗时)
driver.implicitly_wait(10)#隐式等待
driver.maximize_window()# 浏览器最大化
'''模拟鼠标滚轮,加载数据'''
def drop_down():
for x in range(1,11,2):
time.sleep(0.5)
j = x/10
js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' %j
driver.execute_script(js)
'''解析商品数据'''
def parse_product():
lis = driver.find_elements_by_css_selector('.gl-item')
for li in lis:
try:
name = li.find_element_by_css_selector('div.p-name a em').text#商品名称
price = li.find_element_by_css_selector('div.p-price strong i').text + '元' #商品价钱
deal = li.find_element_by_css_selector('div.p-commit strong a').text#评论数
title = li.find_element_by_css_selector('span.J_im_icon a').text#店铺名称
print(name,price,deal,title)
with open('data.csv',mode='a',encoding='utf-8',newline='') as f:
csv_write = csv.writer(f)
csv_write.writerow()
except Exception as e:
print(e)
'''获取下一页内容'''
def get_next():
driver.find_element_by_css_selector('#J_bottomPage > span.p-num > a.pn-next > em').click()
driver.implicitly_wait(15)
keyword = input('请输入您想要的商品:')
driver = webdriver.Chrome()
driver.get('https://www.jd.com')
get_product(keyword)
for page in range(3):
drop_down()
parse_product()
get_next()
可视化部分(这部分用的是pyecharts,在官网上有模板,都是照着模板拔下来的,这块我也没学)
import re
import pandas as pd
import pyecharts.options as opts
from pyecharts.charts import Scatter
def func(x):
if re.search('万', x):
return float(x.replace('万', '')) * 10000
else:
return float(x)
data_df = pd.read_csv(r'data.csv', names=['名称', '价格', '销量', '店铺'])
data_df['价格'] = data_df['价格'].str.replace('元', '').astype('float')
data_df['销量'] = data_df['销量'].str.replace('+', '')
data_df['销量'] = data_df['销量'].apply(func)
x_data = list(data_df['价格'])
print(x_data)
y_data = list(data_df['销量'])
print(y_data)
(
Scatter(init_opts=opts.InitOpts(width="1600px", height="1000px"))
.add_xaxis(xaxis_data=x_data)
.add_yaxis(
series_name="销量",
y_axis=y_data,
symbol_size=20,
label_opts=opts.LabelOpts(is_show=False),
)
.set_series_opts()
.set_global_opts(
xaxis_opts=opts.AxisOpts(
name='价格',
type_="value", splitline_opts=opts.SplitLineOpts(is_show=True)
),
yaxis_opts=opts.AxisOpts(
name='销量',
type_="value",
axistick_opts=opts.AxisTickOpts(is_show=True),
splitline_opts=opts.SplitLineOpts(is_show=True),
),
tooltip_opts=opts.TooltipOpts(is_show=False),
)
.render("月饼价格-销量散点图.html")
)
print('散点图制作完成, 请在当前目录下打开html文件')
代码哪里不好的地方请大佬们指点 大佬 叙白 发表于 2020-10-4 22:11
大佬
谢谢大佬来捧场
向大佬学习 捧场 {:10_256:}{:10_256:} 好不好 ,我也看不懂 。{:5_102:} 这还要指点吗?这已经够秀了. 感谢分享~ {:10_254:} 1 膜拜 这些代码,我一个都不认识,膜拜
页:
[1]