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

使用BeautifulSoup抓取Google Arts & Culture内容返回空列表问题求解

问题根因

你使用requests.get拿到的是页面初始静态源码,Google Arts & Culture的艺术家列表内容是JavaScript动态渲染生成的,Chrome开发者工具中看到的DOM结构是浏览器执行完JS逻辑后生成的结果,直接解析静态源码自然无法匹配到目标元素。

可行解决方案

推荐使用模拟浏览器的工具执行页面渲染JS后再提取内容,以Selenium为例:

  • 前置依赖安装:pip install selenium
  • 示例代码:
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time

# 配置无头模式,不弹出浏览器窗口
chrome_options = Options()
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("--disable-gpu")
# 配置UA避免被识别为爬虫
chrome_options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36")

driver = webdriver.Chrome(options=chrome_options)
url = 'https://artsandculture.google.com/category/artist?tab=time&date=1850'
driver.get(url)
# 等待JS渲染完成,可根据自身网络情况调整等待时长
time.sleep(3)

# 获取渲染完成的完整页面源码
page_source = driver.page_source
driver.quit()

soup = BeautifulSoup(page_source, 'html.parser')
# 正常匹配目标元素
target_links = []
for a_tag in soup.find_all('a', class_='e0WtYb HpzMff PJLMUc', href=True):
    target_links.append(a_tag['href'])
    print(a_tag['href'])

补充说明

如果需要获取全量数据,可添加页面滚动逻辑触发更多内容加载;也可将固定sleep替换为Selenium的显式等待WebDriverWait,避免等待时长不够导致元素加载不全的问题。
如果追求更高的爬取效率,可通过Chrome开发者工具的网络面板抓包找到返回艺术家列表的接口,直接请求接口获取JSON格式数据,该方案需要分析接口的请求参数规则,实现成本略高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:06:06