You need to enable JavaScript to run this app. 使用BeautifulSoup爬取宜家目录页时无法定位指定id的div、提取a链接的求助
优惠活动
大模型
产品
解决方案
定价
更多

使用BeautifulSoup爬取宜家目录页时无法定位指定id的div、提取a链接的求助

宜家1950年目录页爬取问题解决方案

问题本质

  • 目标网站是单页动态渲染应用,首次HTTP请求返回的页面仅包含空壳DOM(即你看到的<div id="fakescroll"></div>),所有文档链接、菜单内容都是前端脚本加载完成后,异步拉取数据再渲染到页面上的
  • 你编写的两段代码存在明显逻辑和语法问题,导致无法拿到有效内容:
    • Selenium代码中的CSS选择器传参错误,且没有等待页面元素加载就直接解析源码,拿到的自然是未渲染的空页面
    • httplib2请求未携带合法的浏览器请求标识,被服务器返回空模板拦截,且静态请求本身就拿不到动态渲染的业务数据

可落地解决方法

方法1:修正Selenium爬取逻辑

调整代码逻辑,加入页面渲染等待,修正语法错误,示例代码如下:

from bs4 import BeautifulSoup
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

target_url = "https://ikeacatalogues.ikea.com/sv-1950/page/1"
# 配置浏览器启动参数,降低页面加载异常概率
chrome_option = webdriver.ChromeOptions()
chrome_option.add_argument("--disable-blink-features=AutomationControlled")
browser = webdriver.Chrome(options=chrome_option)
try:
    browser.get(target_url)
    # 显式等待15秒,直到主菜单容器真正渲染到DOM中
    WebDriverWait(browser, 15).until(
        EC.presence_of_element_located((By.ID, "main_menu"))
    )
    # 解析渲染完成后的页面源码
    soup = BeautifulSoup(browser.page_source, "html.parser")
    # 提取主菜单下所有带链接的a标签
    link_tags = soup.select("div#main_menu a")
    for tag in link_tags:
        if tag.has_attr("href"):
            print(tag["href"])
finally:
    # 爬取完成后关闭浏览器,释放资源
    browser.quit()

注意:

  • 最新版Selenium 4.x已支持自动匹配本地Chrome驱动路径,不需要手动填写executable_path参数,写死路径反而容易触发版本不兼容问题
  • 若等待后仍未拿到目标元素,可在页面加载后执行滚动脚本触发懒加载,再重新解析源码:
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight)")
    

方法2:直接抓取后端数据接口(效率更高)

动态渲染页面的所有业务数据,本质都是前端向后端发起异步请求拿到的结构化数据,不需要渲染整个浏览器页面:

  • 打开浏览器自带的开发者工具,切换到网络请求面板,筛选异步请求类型,刷新页面即可看到加载目录文档元数据的接口
  • 构造和浏览器请求参数完全一致的请求,直接获取接口返回的结构化数据,就能直接拿到所有文档直链,无需解析DOM

补充说明:原httplib2代码拿不到有效内容,除了没有携带合法请求头的问题外,核心是单页应用的首次响应根本不包含业务数据,即使加了请求头,静态请求拿到的也只是空壳页面,必须定位到真正返回业务数据的后端接口,才能高效拿到目标内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 11:24:04