使用Python+Beautiful Soup爬取宠物领养网站无法提取目标div求助
问题原因
你要爬取的页面宠物列表属于动态渲染内容:初始页面加载完成后,浏览器会运行页面自带的JS代码,异步请求后端接口获取宠物数据,再动态生成class为mbcpp_result_animal的div节点插入到页面中。
你直接用urllib请求只能拿到未执行JS的初始静态HTML,因此找不到对应的节点,和你在Chrome开发者工具里看到的完整渲染后DOM结构自然不一致。
解决方案
- 方案1:使用Selenium模拟浏览器运行,直接获取渲染完成后的页面源码
这个方案可以完全模拟真实用户访问浏览器的流程,不需要额外分析接口,适合结构复杂的动态页面。
首先安装依赖:
修改后的代码如下:pip install selenium webdriver-managerfrom 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
相关产品推荐
相关产品推荐

