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

使用BeautifulSoup抓取Google News RSS源链接返回空如何解决

问题原因
  • 正则匹配逻辑完全不匹配RSS结构:Google News返回的RSS是标准XML格式,新闻链接都存储在独立的<link>标签内,不存在href="xxx"的属性结构,用匹配HTML链接的正则不可能匹配到内容。
  • 待匹配的内容来源错误:urlopen(req)返回的是HTTP响应字节流对象,直接调用str(html_page)得到的是该对象的内存地址字符串,而非RSS的实际内容,自然没有匹配结果。
  • 搜索词处理逻辑错误:Google RSS的搜索参数要求URL编码,直接把空格替换为-会导致搜索词无法被正确识别,甚至返回无效响应。
  • 冗余逻辑冲突:已经引入了BeautifulSoup解析库,不需要再用正则做不稳定的内容匹配,直接用解析器提取标签内容即可。
修正后可运行代码
from urllib.request import urlopen, Request
from urllib.parse import quote
from bs4 import BeautifulSoup

# 替换为你自己的搜索词列表
terms = ["人工智能", "climate change", "科技新闻"]
for t in terms:
    # 搜索词URL编码,避免特殊字符、空格导致的请求错误
    encoded_term = quote(t)
    raw_url = f"https://news.google.com/rss/search?q={encoded_term}&hl=en-US&gl=US&ceid=US:en"
    # 加UA头避免被Google反爬拦截
    req = Request(raw_url, headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"})
    # 读取响应的实际RSS内容
    rss_content = urlopen(req).read()
    # 用XML解析器处理RSS内容
    soup = BeautifulSoup(rss_content, "xml")
    # 提取所有link标签的文本内容即为链接
    all_links = [link.text for link in soup.find_all("link")]
    # 过滤掉第一个RSS源本身的链接,只保留新闻链接
    news_links = all_links[1:]
    print(f"搜索词【{t}】抓取结果:")
    print(news_links)
注意事项
  • 如果需要抓取中文内容,把URL里的hl=en-US&gl=US&ceid=US:en替换为对应地区语言参数即可,比如中文区参数为hl=zh-CN&gl=CN&ceid=CN:zh
  • 控制请求频率不要太高,避免被Google临时封禁IP。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:18:03