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

使用requests模块无法抓取目标网站啤酒厂名称的问题求助

问题原因及解决方案

你的脚本没获取到结果,核心原因是目标网站的啤酒厂列表是动态加载的:用requests拿到的只是服务器返回的初始静态HTML,而页面上的啤酒厂内容是浏览器执行JavaScript后才渲染出来的,初始HTML里根本没有你要定位的.company-content > h3[itemprop='name']元素,所以BeautifulSoup找不到任何内容。

下面提供两种可行的解决方法:

方法1:用Selenium模拟浏览器加载动态内容

Selenium可以模拟真实浏览器的行为,等待页面JavaScript执行完成后再抓取内容:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
import time

# 配置Chrome无头模式(不弹出浏览器窗口)
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/103.0.0.0 Safari/537.36')

# 启动浏览器并访问目标页面
driver = webdriver.Chrome(options=chrome_options)
driver.get("https://www.brewersassociation.org/directories/breweries/")

# 等待页面渲染完成(可根据实际情况调整等待时间)
time.sleep(3)

# 如果需要加载更多内容,可以模拟滚动到底部
# for _ in range(3):
#     driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
#     time.sleep(2)

# 定位并打印啤酒厂名称
brewery_names = driver.find_elements(By.CSS_SELECTOR, ".company-content > h3[itemprop='name']")
for name in brewery_names:
    print(name.text)

# 关闭浏览器
driver.quit()

方法2:直接调用动态加载的API接口

打开浏览器开发者工具的「Network」标签,刷新页面后过滤XHR请求,能找到网站用来加载啤酒厂数据的API接口。直接请求这个接口可以拿到结构化的JSON数据,不需要解析HTML:

import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
    'Accept': 'application/json'
}

# 实际API地址需从开发者工具抓包获取,以下为示例格式
api_url = "https://www.brewersassociation.org/wp-json/ba/v1/breweries?per_page=20&page=1"
response = requests.get(api_url, headers=headers)
data = response.json()

# 遍历打印啤酒厂名称
for brewery in data:
    print(brewery['name'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:40:57