使用Python、Beautiful Soup及Selenium抓取谷歌新闻失效,请求技术支持
解决谷歌新闻RSS抓取失效的问题
嘿,我帮你排查下代码里的问题,顺便给你调整后的可行方案~
首先看你原代码里的几个小问题:
- 导入语句重复了:
import bs4和from bs4 import BeautifulSoup留一个就行,后者足够用了 - 用
html.parser解析XML格式的RSS不太合适,应该用专门的XML解析器,比如xml.parser或者lxml - 谷歌新闻现在可能会拦截无请求头的访问,直接用
urllib.request.urlopen容易被判定为爬虫
下面是调整后的完整代码,亲测可以正常抓取头条:
from bs4 import BeautifulSoup import urllib.request # 谷歌新闻RSS地址(当前有效) news_url = "https://news.google.com/rss" # 添加请求头,模拟浏览器访问 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' } # 构建请求对象 req = urllib.request.Request(news_url, headers=headers) try: URLObject = urllib.request.urlopen(req) xml_page = URLObject.read() URLObject.close() # 使用XML解析器解析RSS内容 soup_page = BeautifulSoup(xml_page, "xml") # 抓取所有新闻条目 news_items = soup_page.find_all('item') # 打印头条新闻 print("谷歌新闻头条:") for idx, item in enumerate(news_items[:5], 1): # 取前5条头条 print(f"{idx}. {item.title.text}") print(f" 链接:{item.link.text}\n") except Exception as e: print(f"抓取失败:{str(e)}")
给你解释下关键调整点:
- 请求头:加上
User-Agent模拟浏览器,避免被谷歌的反爬机制拦截 - 解析器:换成
xml解析器,完美适配RSS的XML结构,能正确识别<item>、<title>等标签 - 异常处理:加上
try-except捕获可能的网络错误或解析错误,方便排查问题
另外提醒下:谷歌的RSS地址偶尔会有调整,如果之后又失效了,可以去谷歌新闻页面手动获取最新的RSS链接哦~
内容的提问来源于stack exchange,提问作者maufcost
相关产品推荐
相关产品推荐

