Python实现微博热搜数据抓取:基于Requests与Lxml的实战教程

Leo
Leo
发布时间:2026-10-12| 4人浏览过
原创

本文介绍使用Python的Requests和Lxml库抓取微博热搜数据的方法。通过解析HTML源码,利用XPath定位热搜标题、排名及阅读量节点,并处理置顶微博的特殊逻辑,最终格式化输出结果。

抓取微博热搜数据的过程相对直接,本示例主要依赖lxml和requests这两个Python库来完成。

目标URL为:https://s.weibo.com/top/summary?Refer=top_hot&topnav=1&wvr=6

第一步,分析网页源代码:在浏览器中右键点击页面,选择“查看网页源代码”以查看原始HTML结构。

通过检查网页代码,我们可以定位到关键的数据节点。

具体而言,热搜标题文本位于<td class="td-02">元素的子节点<a>中。

其次,热搜的排名信息包含在<td class=td-01 ranktop>元素内(需注意,置顶微博不显示常规排名)。

最后,热搜的阅读量数据存储在<td class="td-02">元素的子节点<span>中。

第二步,使用requests库获取网页内容。

首先定义目标url,并设置User-Agent以模拟浏览器请求(此步骤虽非绝对必要,但有助于防止被识别为爬虫程序)。

###网址
url="https://s.weibo.com/top/summary?Refer=top_hot&topnav=1&wvr=6"
###模拟浏览器,这个请求头windows下都能用
header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}

接着,利用requests库的get()方法获取网页文本,并通过lxml的etree.HTML()将文本解析为DOM对象。

###获取html页面
  html=etree.HTML(requests.get(url,headers=header).text)

第三步,构造XPath路径以提取数据。

根据前文分析的HTML结构,对应的三个XPath路径分别如下。

affair=html.xpath('//td[@class="td-02"]/a/text()')
rank=html.xpath('//td[@class="td-01 ranktop"]/text()')
view=html.xpath('//td[@class="td-02"]/span/text()')

由于XPath查询返回的是列表,因此变量affair、rank和view均为字符串列表。

第四步,对提取的数据进行格式化输出。

需要注意的是,affair列表中第一个元素为置顶热搜,需将其单独分离处理。

top=affair[0]
affair=affair[1:]

此处使用了Python的列表切片功能来实现这一分离。

 print('{0:<10}\t{1:<40}'.format("top",top))
  for i in range(0, len(affair)):
    print("{0:<10}\t{1:{3}<30}\t{2:{3}>20}".format(rank[i],affair[i],view[i],chr(12288)))

当前的输出格式尚未实现完美的列对齐,但已能展示基本数据。

第五步,整合全部代码。

###导入模块
import requests
from lxml import etree
###网址
url="https://s.weibo.com/top/summary?Refer=top_hot&topnav=1&wvr=6"
###模拟浏览器
header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}
###主函数
def main():
  ###获取html页面
  html=etree.HTML(requests.get(url,headers=header).text)
  rank=html.xpath('//td[@class="td-01 ranktop"]/text()')
  affair=html.xpath('//td[@class="td-02"]/a/text()')
  view = html.xpath('//td[@class="td-02"]/span/text()')
  top=affair[0]
  affair=affair[1:]
  print('{0:<10}\t{1:<40}'.format("top",top))
  for i in range(0, len(affair)):
    print("{0:<10}\t{1:{3}<30}\t{2:{3}>20}".format(rank[i],affair[i],view[i],chr(12288)))
main()

程序运行后的结果展示如下。

总结:本文介绍了使用Python进行微博热搜抓取的基本流程。

以上内容为Python网络爬虫之爬取微博热搜的详细介绍,希望能对大家有所帮助。如有任何疑问,欢迎留言,小编会及时回复。感谢大家对本站的支持! 如果本文对您有帮助,欢迎转载,请注明出处,谢谢!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。