You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python解析Yahoo RSS Feed时,如何正确获取link元素的内容?

解决Yahoo RSS Feed中Link内容无法正确提取的问题

我之前也碰到过requests_html处理RSS里这类特殊标签的坑,特别是它把<link>...</link>解析成自闭合<link/>、文本内容跑到标签外面的情况,给你几个可行的解决思路:

方法1:用XPath提取Link标签后的兄弟文本节点

因为requests_html已经把原link标签解析成了自闭合节点,实际的链接文本是它的后续兄弟文本节点,可以通过XPath精准定位:

import pandas as pd
from requests_html import HTMLSession

session = HTMLSession()
url = "你的Yahoo RSS Feed地址"
response = session.get(url)

items = response.html.find("item", first=False)
data = []
for item in items:
    # 提取title
    title = item.find('title', first=True).text
    # 提取link:定位link标签后的第一个文本节点
    link = item.xpath('./link/following-sibling::text()')[0].strip()
    # 提取source
    source = item.find('source', first=True).text
    
    data.append({"title": title, "link": link, "source": source})

df = pd.DataFrame(data)
print(df)

方法2:直接对Item的HTML字符串做正则匹配

如果XPath用着不顺手,也可以把item的HTML转换成字符串后,用正则匹配<link/>之后的内容:

import re
import pandas as pd
from requests_html import HTMLSession

session = HTMLSession()
url = "你的Yahoo RSS Feed地址"
response = session.get(url)

items = response.html.find("item", first=False)
data = []
for item in items:
    item_html = item.html
    # 匹配<link/>之后到下一个标签前的内容
    link_match = re.search(r'<link/>(.*?)(?=<)', item_html)
    link = link_match.group(1).strip() if link_match else None
    title = item.find('title', first=True).text
    source = item.find('source', first=True).text
    
    data.append({"title": title, "link": link, "source": source})

df = pd.DataFrame(data)

方法3:换用专门的RSS解析库(推荐)

requests_html主要是为HTML页面设计的,处理RSS这类XML格式的内容容易出问题。更省心的方式是用feedparser——专门针对RSS/Atom格式的解析库,能完美处理这类标签:

import feedparser
import pandas as pd

url = "你的Yahoo RSS Feed地址"
feed = feedparser.parse(url)

# 提取所需字段
data = []
for entry in feed.entries:
    entry_data = {
        "title": entry.title,
        "link": entry.link,
        "source": entry.source.get("title") if hasattr(entry, "source") else None
    }
    data.append(entry_data)

df = pd.DataFrame(data)
print(df)

总结

优先推荐用feedparser,它能避开XML解析的各种奇怪问题;如果一定要用requests_html,XPath的方式比正则更可靠,不易出现匹配错误。

内容的提问来源于stack exchange,提问作者xdo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 17:09:06