爬虫实战-京东用户购买xz颜色比例统计(小白入门)

作为爬虫小白,代码偏向简单,大佬勿喷~

本次爬取网站页面:https://item.jd.com/100003749352.html
本次使用语言:Python
本次使用工具:requests库

思路

1.Chrome浏览器中,进入商品网站,按F12进入开发者工具,Ctrl+R找到productPageComments,双击可进入评论区接口。
爬虫实战-京东用户购买xz颜色比例统计(小白入门)_第1张图片
2.分析接口url和内容,通过改变page=?可“翻页”,"productColor=?是爬取的颜色。
爬虫实战-京东用户购买xz颜色比例统计(小白入门)_第2张图片
3.用requests库获得text,用正则表达式对text进行爬取获得color,存入Color_all_list。
4.对Color_all_list去重,得到颜色种类列表Color_kinds_list,同时使用双重循环得到Color_num_list。
5.画出饼状图即可。

个人认为重点

1.学会如何找到评论区接口。
2.分析url找到如何进行翻页操作。
3.正确写出正则表达式。

待解决的问题

1.偶尔会出现爬取失败,原因可能是网络、agent,在今后学习过程中解决。
2.爬取速度有待提高。

代码

import requests
import re
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #解决中文乱码

'''
列表说明
Color_all_list:每个原数据列表
Color_kinds_list:颜色种类列表(由Color_all_list去重可得)
Color_num_list:对应每种颜色购买数量列表
'''

'''
函数功能
getColorlist():爬取每个用户购买的颜色,颜色种类,每种颜色购买的数量
ColorInfomation():输出颜色得种类和对应数量
DrawFigure():作饼状图
'''

def getColorlist(Color_kinds_list, Color_all_list, Color_num_list, header):
    for i in range(0,20):#自己设置爬取页数
        try:
            print("----------------------------------------------page"+str(i))    
            #这里通过改变page实现翻页
            url = "https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100003749352&score=0&sortType=5&page="+str(i)+"&pageSize=10&isShadowSku=0&fold=1"
            r = requests.get(url, headers = header)        
            r.raise_for_status()
            r.encoding = r.apparent_encoding
            color = re.findall('"productColor":"(.*?)"',r.text)#匹配颜色
            print(color)
            Color_all_list += color
            print(" ")   
            i = i + 1
        except:
            print("爬取失败")
    Color_kinds_list = list(set(Color_all_list))
    Color_num_list = [0]*len(Color_kinds_list)

    for i in range(len(Color_all_list)):
        for j in range(len(Color_kinds_list)):    
            if Color_all_list[i] == Color_kinds_list[j]:
                Color_num_list[j] += 1
    return Color_num_list, Color_kinds_list,Color_all_list
                
def ColorInfomation(Color_kinds_list, Color_all_list, Color_num_list):
    print("~~~~~~~~~~~~~~~~")
    print("color kinds:"+str(len(Color_kinds_list)))
    print("all number:"+str(len(Color_all_list)))
    print(Color_kinds_list)
    print(Color_num_list)

def DrawFigure(Color_num_list, Color_kinds_list):
    plt.figure(figsize=(6,9)) #调节图形大小
    plt.pie(Color_num_list,
            labels=Color_kinds_list,
            autopct = '%3.2f%%', #数值保留固定小数位
            shadow = False, #无阴影设置
            startangle =90, #逆时针起始角度设置
            pctdistance = 0.6) #数值距圆心半径倍数距离
    plt.title("都市丽人蕾丝胸罩用户购买颜色比例")
    plt.axis('equal')
    plt.show()

def main():
    header = {
        'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
}
    Color_kinds_list = []
    Color_all_list = []
    Color_num_list = []
    Color_num_list,Color_kinds_list,Color_all_list = getColorlist(Color_kinds_list, Color_all_list, Color_num_list,header)
    print("颜色数值:")
    ColorInfomation(Color_kinds_list, Color_all_list, Color_num_list)
    print("饼状图:")
    DrawFigure(Color_num_list, Color_kinds_list)
    
main()

结果:

展示的为爬取50页的结果,由于有1-2页爬取失败(待解决。。)可能每次运行结果有些许不同。
爬虫实战-京东用户购买xz颜色比例统计(小白入门)_第3张图片
由图可知,京东用户购买蕾丝xz主要偏向于“藕粉“色。

附加网址:
User Agent String.Com.

你可能感兴趣的:(爬爬爬,Python,数据分析,大数据,python)