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

求助:用Python3.6+BeautifulSoup抓取网页搜索结果表格链接

解决动态加载搜索结果的链接抓取问题

看起来你遇到的是动态内容渲染的核心问题——这个网站的搜索结果表格是通过JavaScript动态生成的,直接用requests+BeautifulSoup只能拿到初始的静态HTML,根本获取不到JS执行后加载的结果内容。别担心,我们可以用浏览器自动化工具模拟真实用户的浏览行为,就能轻松拿到完整的搜索结果了。

下面是针对你的Windows 10 + Python 3.6环境的具体解决方案:

方案选择:用Selenium模拟浏览器

Selenium是最成熟的浏览器自动化工具,能完美处理JS动态加载的页面。步骤如下:

1. 安装依赖

先安装兼容Python3.6的Selenium版本,再配置Chrome浏览器驱动:

pip install selenium==3.141.0  # 这个版本适配Python3.6,稳定性好

然后去Chrome官方下载和你当前Chrome版本匹配的ChromeDriver,解压后把chromedriver.exe放到Python的Scripts目录,或者直接添加到系统环境变量,这样代码就能直接调用它。

2. 编写抓取搜索结果链接的代码

这段代码会模拟打开浏览器、输入搜索内容、点击搜索、等待结果加载,最后提取表格里的所有有效链接:

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

# 初始化Chrome浏览器
driver = webdriver.Chrome()

try:
    # 打开目标网站
    driver.get("https://wagyu.digitalbeef.com/")
    
    # 等待搜索框加载完成(用浏览器F12开发者工具查看实际元素的ID/Class替换占位符)
    search_box = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "实际搜索框的ID"))
    )
    
    # 输入你的搜索关键词
    search_box.send_keys("你的搜索关键词")
    
    # 找到搜索按钮并点击(同样替换成实际按钮的选择器)
    search_button = driver.find_element(By.CLASS_NAME, "实际搜索按钮的Class")
    search_button.click()
    
    # 等待结果表格加载完成,假设表格的ID是"result-table",请替换为实际值
    result_table = WebDriverWait(driver, 15).until(
        EC.presence_of_element_located((By.ID, "实际结果表格的ID"))
    )
    
    # 提取表格里的所有有效链接
    links = result_table.find_elements(By.TAG_NAME, "a")
    result_urls = [link.get_attribute("href") for link in links if link.get_attribute("href")]
    
    # 打印或保存链接
    print("抓取到的牛只页面链接:")
    for url in result_urls:
        print(url)
        
finally:
    # 关闭浏览器
    driver.quit()

3. 关键注意事项

  • 元素选择器调整:一定要用浏览器开发者工具(F12)查看搜索框、搜索按钮、结果表格的实际ID/Class,替换代码里的占位符。比如搜索框用的是Class而不是ID,就把By.ID改成By.CLASS_NAME,值换成对应的Class名称。
  • 等待机制:用WebDriverWait比time.sleep()更可靠,它会等到目标元素出现再继续执行,避免因网速慢导致的元素找不到问题。
  • 反爬提示:不要短时间内频繁请求网站,建议在每个操作之间加1-2秒的延迟(比如import time; time.sleep(2)),避免被网站封禁IP。

后续处理:提取谱系信息

拿到所有链接后,你就可以复用之前写的BeautifulSoup代码,遍历每个链接提取牛只名称和亲本信息了:

import requests
from bs4 import BeautifulSoup

for url in result_urls:
    response = requests.get(url)
    soup = BeautifulSoup(response.text, "html.parser")
    
    # 替换成你之前写的提取逻辑
    cow_name = soup.find("h1", class_="cow-title").text.strip()
    parent_section = soup.find("div", class_="parent-info")
    father_info = parent_section.find("span", class_="father").text.strip()
    mother_info = parent_section.find("span", class_="mother").text.strip()
    
    # 保存数据或构建谱系图
    print(f"牛只名称:{cow_name}")
    print(f"父本:{father_info} | 母本:{mother_info}")

备选方案:Playwright(若后续升级Python版本)

如果之后你能把Python升级到3.7+,Playwright会是更省心的选择——它自带浏览器驱动管理,不需要手动下载驱动,代码也更简洁。不过考虑到你当前用的是Python3.6,优先用Selenium更稳妥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:30:41