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

使用requests、bs4、newspaper爬取谷歌新闻时soup.select('.r a')返回空值

问题根因

  • 谷歌已更新搜索结果页面的DOM结构,你之前使用的.r类名早已被移除,导致soup.select(".r a")无法匹配到任何链接元素
  • 原代码还存在多处语法、逻辑错误,需要同步修复

修复要点

  • 替换正确的DOM选择器,当前谷歌新闻搜索结果链接统一携带jsname="UWckNb"属性,用该属性匹配更稳定
  • 修复bs4未显式导入、webbrowser拼写错误的问题
  • 移除webbrowser.open()调用,该方法返回布尔值而非URL,无法传入Article类做解析
  • 新增请求头模拟浏览器访问,避免谷歌直接拦截爬虫请求
  • 修正关键词拼接逻辑,移除多余的HTML实体字符

修复后完整代码

import pandas as pd
import requests
from bs4 import BeautifulSoup
import time
import newspaper 
from newspaper import Article

# 全局存储变量
Company_name1 =[]
Article_number1=[]
Article_Title1=[]
Article_Authors1=[]
Article_pub_date1=[]
Article_Text1=[]
Article_Summary1=[]
Article_Keywords1=[]
Final_dataframe=[]

# 模拟浏览器的请求头,避免被谷歌拦截
HEADERS = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}

class Newspapr_pd:
    def __init__(self,term):
        self.term=term
        self.subjectivity=0
        self.sentiment=0
        # 搜索URL直接拼接带引号的关键词
        self.url=f'https://www.google.com/search?q="{self.term}"&safe=active&tbs=qdr:w,sdb:1&tbm=nws&source=lnt&dpr=1'
    
    def NewsArticlerun_pd(self):
        response=requests.get(self.url, headers=HEADERS)
        response.raise_for_status()
        soup=BeautifulSoup(response.text,'html.parser')
        # 替换为当前有效的选择器
        links=soup.select('a[jsname="UWckNb"]')
       
        numOpen = min(5, len(links))
        Article_number=0
        for i in range(numOpen):
            # 直接获取链接,不需要打开浏览器
            article_url = links[i].get("href")
            article = Article(article_url, language="en")
            Article_number+=1
            
            print('*************************************************************************************')
            Article_number1.append(Article_number)
            Company_name1.append(self.term)

            try:
                # 下载解析文章
                article.download() 
                article.parse() 
                article.nlp() 
                
                Article_Title1.append(article.title)
                Article_Text1.append(article.text)
                Article_Authors1.append(article.authors)
                Article_pub_date1.append(article.publish_date)
                Article_Summary1.append(article.summary)
                Article_Keywords1.append(article.keywords)
            except Exception as e:
                print(f'页面加载失败:{str(e)}')
                continue
            # 每爬完一篇加1秒延迟,避免被封
            time.sleep(1)
  
        for art_num,com_name,title,text,auth,pub_dt,summaries,keywds in zip(Article_number1,Company_name1,Article_Title1,Article_Text1,Article_Authors1,Article_pub_date1,Article_Summary1,Article_Keywords1):
            Final_dataframe.append({
                'Article_link_num':art_num, 
                'Company_name':com_name,
                'Article_Title':title,
                'Article_Text':text,
                'Article_Author':auth,
                'Article_Published_date':pub_dt,
                'Article_Summary':summaries,
                'Article_Keywords':keywds
            })
        
list_of_companies=['Amazon','Jetairways','nirav modi']

for i in list_of_companies:
    a=Newspapr_pd(i)
    a.NewsArticlerun_pd()
    # 每个关键词搜索完加2秒延迟
    time.sleep(2)

Final_new_dataframe=pd.DataFrame(Final_dataframe)
print(Final_new_dataframe.tail())

注意事项

如果后续再次出现匹配不到链接的情况,直接打开谷歌新闻搜索页面,按F12查看搜索结果链接的最新属性,替换选择器即可。如果频繁被谷歌拦截,可以适当拉长延迟时间,或者使用代理IP池。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:45:03