每天微博热搜都在不定时的变,通过抓取热搜数据,可以方便我们知道每天的热搜内容。
python的几行代码就能简单爬取到热搜的数据。
1.数据抓取
首先,我们得知道微博热搜内容的具体链接。
https://s.weibo.com/top/summary
如下图所示,通过访问网站链接,可以拿到当天此时的热搜数据。接下来,我们需要通过代码去实现它。
def get_html_data(self):
res = requests.get(self.url, headers=self.headers).text
return res
通过requests模块包,我们就能得到网页的html文件,接下来就是要对html文件的处理解析。
2.数据处理
为了更好的分析html文件内容,我复制到编辑器上分析文本数据。
通过分析,不难发现,我们所想要的数据如下图所示结构中。
这里主要是获取四个要素 热搜排名,热搜话题,话题热度,热搜标签。
简单实现代码如下:
def deal_html_data(self, res):
res = BeautifulSoup(res, "lxml")
# 遍历热搜的标签
# #pl_top_realtimehot 根据id, > table > tbody > tr 逐层查找
for item in res.select("#pl_top_realtimehot > table > tbody > tr"):
# 按类名.td-01提取热搜排名
_rank = item.select_one('.td-01').text
if not _rank:
continue
# 按类名.td-02提取热搜关键词
keyword = item.select_one(".td-02 > a").text
# 提取热搜热度
heat = item.select_one(".td-02 > span").text
# 提取热搜标签
icon = item.select_one(".td-03").text
self.hot_list.append({"rank": _rank, "keyword": keyword, "heat": heat, "icon": icon, "time":
datetime.now().strftime("%Y-%m-%d %H:%M:%S")})
这里采用BeautifulSoup中select,和select_one去解析html文件。
这里对select和select_one做一下简单补充。
# 通过标签名查找
soup.select_one('a')
# 通过类名查找
soup.select_one('.td-02')
# 通过ID去查找
soup.select_one('#pl_top_realtimehot')
# 组合查找,根据ID及标签层级关系查找
res.select("#pl_top_realtimehot > table > tbody > tr")
通过以上处理,我们就能得到所需要的数据。
3.数据存储
这里仅是把数据简单存储到数据库中,具体看效果图。
更多源码,请参考原文