目标 爬取今日热榜网站的淘宝销售总榜,提取商品名称中的名词,做词语的数目统计,查看哪些是高频商品名词。
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 jiebaimport 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导师-蚂蚁
任何问题可以微信扫码咨询 蚂蚁老师
点击下方“阅读原文”,可以直达课程主页