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

使用Beautiful Soup爬取Argus新闻时定位指定class容器无结果问题

问题原因分析
  • 请求未模拟浏览器特征,触发网站反爬机制:该站点有基础反爬策略,直接发送无有效User-Agent的请求会被识别为爬虫,返回的页面不包含新闻正文相关的DOM节点,自然无法匹配到article.news-container.cf元素。
  • 内容为动态渲染生成:站点新闻内容大概率是通过JavaScript异步加载渲染的,requests库只能拿到初始的静态HTML源码,此时目标节点还未被JS生成,所以匹配结果为空。
  • 多类名匹配规则问题:BeautifulSoup按多类名精准匹配时,若页面类名的空格、顺序有微小差异也会导致匹配失败,不过这个问题在当前场景下优先级低于前两个。
解决方案

方案1:添加请求头尝试静态爬取

先补充完整的请求头模拟真实浏览器请求,优先尝试静态获取内容,代码修改如下:

import requests
from bs4 import BeautifulSoup
import urllib3
# 关闭verify=False带来的警告
urllib3.disable_warnings()

url = "https://www.argusmedia.com/en/news/2214037-us-hrc-prices-rise-as-supply-remains-tight"
# 模拟Chrome浏览器的请求头
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",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.5",
    "Referer": "https://www.argusmedia.com/"
}

r1 = requests.get(url, headers=headers, verify=False)
print(r1.status_code)
coverpage = r1.content
soup1 = BeautifulSoup(coverpage, "html5lib")
coverpage_news = soup1.find_all('article' , class_ ='news-container cf')
print(len(coverpage_news))

如果运行后匹配长度仍为0,说明内容是动态渲染的,需要使用方案2。

方案2:使用无头浏览器模拟页面加载

用Selenium等工具模拟浏览器完整加载页面,等待JS渲染完成后再提取内容,示例代码如下:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import time

chrome_options = Options()
# 无头模式,不弹出浏览器窗口
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("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")

url = "https://www.argusmedia.com/en/news/2214037-us-hrc-prices-rise-as-supply-remains-tight"
driver = webdriver.Chrome(options=chrome_options)
driver.get(url)
# 等待3秒让页面完全渲染,也可以用显式等待定位目标元素提升效率
time.sleep(3)
# 获取渲染后的完整页面源码
page_source = driver.page_source
driver.quit()

soup1 = BeautifulSoup(page_source, "html5lib")
coverpage_news = soup1.find_all('article' , class_ ='news-container cf')
print(len(coverpage_news))

拿到目标元素后就可以进一步提取标题、正文、发布日期等所需信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:24:01