|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
后端功能部分
- from selenium import webdriver
- import time
- 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([name,price,deal,title])
- 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文件')
复制代码
代码哪里不好的地方请大佬们指点 |
评分
-
查看全部评分
|