Py学习  »  Python

3分钟Python爬取淘宝热卖榜,完成商品统计分析

蚂蚁学Python • 1 年前 • 758 次点击  

目标

爬取今日热榜网站的淘宝销售总榜,提取商品名称中的名词,做词语的数目统计,查看哪些是高频商品名词。

https://tophub.today/n/yjvQDpjobg

1. 导入相关的库

import requests
import pandas as pd
from bs4 import BeautifulSoup
import time

其中requests用于爬取网页、pandas用于数据分析、bs4用于解析网页。

2. 爬取数据

定义Headers

headers = {
    "User-Agent""Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36"
}

爬取网页内容

url = "https://tophub.today/n/yjvQDpjobg"
response = requests.get(url, headers=headers)

解析到DataFrame

df = pd.read_html(response.text)[0]

输出df,会看到如下内容:

3. 实现中文分词

如果没有jieba这个库,需要先安装

pip install jieba

引入库

import jieba
import jieba.posseg as pseg

分词测试:

words = pseg.cut("我爱北京天安门")
list(words)

输出结果:




    
[pair('我', 'r'), pair('爱', 'v'), pair('北京', 'ns'), pair('天安门', 'ns')]

如果要提取里面的名词,有个特点是,词性字符串中包含n这个字母。

比如,只提取名词:

noun_words = []
for word, pos in words:
    if "n" in pos:
        noun_words.append(word)
noun_words

输出结果为:

['北京''天安门']

4. 统计最高频的名词

先写一个函数,传入一个句子,可以得到中文名词

def get_noun_words(word_str):
    """执行分词,只获取名词,只保留字数大于1的单词"""
    words = pseg.cut(word_str)
    noun_words = []
    for word, pos in words:
        if "n" in pos and len(word) > 1:
            noun_words.append(word)
    return noun_words

然后,直接用于dataframe的商品名称列,实现分词

df["分词"] = df[2].map(get_noun_words)
df

这时候,对于“分词”这一列,可以统计词频了。

df_new = df.explode("分词")["分词"].value_counts().head(20)
df_new

从里面可以看到一些特点,例如儿童、婴儿、纯棉等名词,在热卖榜出现的很多。


如果想要跟蚂蚁老师学习Python技术,

这是蚂蚁老师的视频全集

https://study.163.com/series/1202914611.htm,

涵盖了8个学习路线,包含数据分析、WEB开发、机器学习、办公自动化等方向;

课程永久有效,新课全都免费看;

蚂蚁老师本人提供答疑、群聊答疑等服务;

课程重复回看,永久有效

提供副业兼职渠道;

课程可以单独买,也可以购买全套课程;

全套课原价1998元本月优惠价格998元

如果想要更多了解:

蚂蚁老师每晚21~23点直播,抖音账号:Python导师-蚂蚁

任何问题可以微信扫码咨询蚂蚁老师

点击下方“阅读原文”,可以直达课程主页

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/168430
 
758 次点击