You need to enable JavaScript to run this app. 使用Python+Beautiful Soup爬取宠物领养网站无法提取目标div求助
优惠活动
大模型
产品
解决方案
定价
更多

使用Python+Beautiful Soup爬取宠物领养网站无法提取目标div求助

问题原因

你要爬取的页面宠物列表属于动态渲染内容:初始页面加载完成后,浏览器会运行页面自带的JS代码,异步请求后端接口获取宠物数据,再动态生成class为mbcpp_result_animal的div节点插入到页面中。
你直接用urllib请求只能拿到未执行JS的初始静态HTML,因此找不到对应的节点,和你在Chrome开发者工具里看到的完整渲染后DOM结构自然不一致。

解决方案
  • 方案1:使用Selenium模拟浏览器运行,直接获取渲染完成后的页面源码
    这个方案可以完全模拟真实用户访问浏览器的流程,不需要额外分析接口,适合结构复杂的动态页面。
    首先安装依赖:
    pip install selenium webdriver-manager
    
    修改后的代码如下:
    from bs4 import BeautifulSoup as soup
    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    from webdriver_manager.chrome import ChromeDriverManager
    import time
    
    my_url = 'https://indyhumane.org/adoptable-cats/'
    
    # 初始化Chrome浏览器,自动适配本地Chrome版本
    driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
    driver.get(my_url)
    # 等待页面完全加载渲染,可根据网络情况调整等待时长
    time.sleep(3)
    # 获取渲染完成后的完整页面源码
    page_html = driver.page_source
    driver.quit()
    
    page_soup = soup(page_html, "html.parser")
    containers = page_soup.findAll("div",{"class":"mbcpp_result_animal"})
    print(len(containers))
    
  • 方案2:直接请求数据接口,跳过页面渲染步骤
    你可以通过Chrome开发者工具的「网络」面板,筛选Fetch/XHR请求,找到获取宠物列表的后端接口,直接请求接口拿到JSON格式的宠物数据,这种方式运行效率更高,也不需要启动浏览器。注意请求时需要添加User-Agent请求头,避免被网站的反爬策略拦截。

爬取网站数据前请确认你符合目标网站的robots规则和用户协议,避免违规爬取带来的风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 17:36:06