几行代码完成微博热搜榜爬虫

每天微博热搜都在不定时的变,通过抓取热搜数据,可以方便我们知道每天的热搜内容。

python的几行代码就能简单爬取到热搜的数据。

1.数据抓取

首先,我们得知道微博热搜内容的具体链接。

https://s.weibo.com/top/summary

如下图所示,通过访问网站链接,可以拿到当天此时的热搜数据。接下来,我们需要通过代码去实现它。


image.png
def get_html_data(self):
    res = requests.get(self.url, headers=self.headers).text
    return res

通过requests模块包,我们就能得到网页的html文件,接下来就是要对html文件的处理解析。

2.数据处理

为了更好的分析html文件内容,我复制到编辑器上分析文本数据。

通过分析,不难发现,我们所想要的数据如下图所示结构中。


image.png

这里主要是获取四个要素 热搜排名,热搜话题,话题热度,热搜标签。

简单实现代码如下:

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")

通过以上处理,我们就能得到所需要的数据。

image.png

3.数据存储

这里仅是把数据简单存储到数据库中,具体看效果图。


image.png

更多源码,请参考原文

你可能感兴趣的:(几行代码完成微博热搜榜爬虫)