Python爬取中关村手机排行榜并对其可视化

导入模块

import requests 
import re 
import numpy as np 
import matplotlib 
import matplotlib.pyplot as plt 
from lxml import html 
etree = html.etree

网站分析

中关村并没有用动态数据加载这里就直接爬取好了

def get_articles_list():
    title_list = []
    price_list = []
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36'
    }
    url = 'http://top.zol.com.cn/compositor/57/cell_phone.html'
    page = requests.get(url, headers=headers).text
    page_text = etree.HTML(page)
    li_list = page_text.xpath(
        '//div[@class="rank-list"]/div')#分析出包含手机名称以及价格的子div
    for li in li_list:
        title = li.xpath('./div[3]/div[1]/a/text()')#分析出手机名称
        price = li.xpath('./div[4]/div/text()')#手机价格
        for t, p in zip(title, price):#循环遍历出手机价格的字符串
            t = re.sub(r"[\uFF08-\uFF09].*[\uFF08-\uFF09]", "", t)#利用正则表达式将手机名称中全角括号包括括号中的内容去掉
            if p != '概念产品':#如果手机价格不等于概念产品就将其添加到list中
                title_list.append(t)
                p = p[1:len(p)]#截取去掉原本带着的¥符号
                price_list.append(int(p))
            else:#等于概念产品就将价格改为99999方便后期做柱状图
                p = 99999999
                title_list.append(t)
                price_list.append(p)
    return title_list, price_list

利用matplotlib将数据生成柱状图

if __name__ == "__main__":
    title_list, price_list = get_articles_list()
    # 设置matplotlib正常显示中文和负号
    matplotlib.rcParams['font.sans-serif'] = ['SimHei']   # 用黑体显示中文
    matplotlib.rcParams['axes.unicode_minus'] = False     # 正常显示负号
    get_articles_list()#运行get_articles_list函数
    plt.ylabel('价格')#y轴标题
    plt.xlabel("品牌")#x轴标题
    x = np.array(title_list[0:8])#选取前8个对其可视化
    y = np.array(price_list[0:8])#选取前8个对其可视化
    plt.bar(x, y)#设置x,y轴
    plt.show()#显示图形

效果图

在这里插入图片描述
在这里插入图片描述

版权声明:
作者:江霁月
链接:https://www.jiangjiyue.com/basic/python/bot/60.html
来源:江霁月的私人小屋
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
< <上一篇
下一篇>>
文章目录
关闭
目 录