页面源码无目标HTML标签,如何抓取Danfoss产品页PDF及下载链接?
问题与解决方案
问题详情
我尝试从Danfoss产品页面的Visuals表格中抓取PDF链接及下载链接,但目标HTML标签未出现在页面初始源码中,导致抓取失败。使用的代码如下:
table=soup.find('table',attrs={'class':'table visual-table sort-table dynamic-table'}) if(table): rows = table.find_all('li') for row in rows: a=row.find_all('a',href=True) for i in a: print('img: ',i['href'])
原因分析
页面的Visuals表格是动态加载的(通过JavaScript/AJAX异步渲染),BeautifulSoup只能解析页面初始加载的静态HTML,无法获取JS动态生成的元素,因此找不到目标标签。
可行解决方案
方案1:抓取AJAX接口数据
- 打开浏览器开发者工具(F12),切换到「Network」标签,过滤「XHR/Fetch」请求;
- 刷新页面,找到返回Visuals表格数据的JSON接口;
- 直接请求该接口,解析返回的JSON数据提取链接,无需解析HTML,效率更高。
方案2:使用无头浏览器渲染页面
用Selenium/Playwright等工具模拟浏览器加载页面,等待动态元素渲染完成后再抓取。以下是Selenium的示例代码:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 初始化浏览器驱动(需提前下载对应浏览器的驱动) driver = webdriver.Chrome() driver.get("https://store.danfoss.com//en/Climate-Solutions-for-cooling/Sensors-and-transmitters/Sensors/Temperature-sensors/Temperature-sensor%2C-ETN%2C-1-50-m/p/077F8726") # 等待Visuals表格加载完成(最多等待10秒) wait = WebDriverWait(driver, 10) table = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "visual-table"))) # 抓取表格内的PDF及下载链接 links = table.find_elements(By.TAG_NAME, "a") for link in links: href = link.get_attribute("href") if href and (".pdf" in href or "download" in href.lower()): print("目标链接:", href) # 关闭浏览器 driver.quit()
内容的提问来源于stack exchange,提问作者Bar oo.
相关产品推荐
相关产品推荐

