使用BeautifulSoup/Selenium提取Farfetch网站销售页总页码遇到问题
问题根源
- BeautifulSoup无法获取的核心原因是该站点的分页元素为JavaScript动态渲染内容,静态HTTP请求返回的原始HTML中不存在该节点,自然无法解析到目标文本。
- Selenium定位失败多为两个原因:未等待动态内容加载完成就执行定位操作,或是选择器书写错误、未匹配到对应节点。
解决方案
方案1:修正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://www.farfetch.com/uk/shopping/women/sale/all/items.aspx") # 可选:滚动到页面底部触发底部元素渲染 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") try: # 最多等待10秒,直到目标节点出现 page_element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.XPATH, '//div[@data-testid="page-number"]')) ) page_info = page_element.text # 拆分文本提取总页数 total_pages = int(page_info.split("of")[-1].strip()) print(total_pages) finally: driver.quit()
方案2:直接调用数据接口(更高效)
不需要启动浏览器渲染页面,可通过抓包获取站点商品列表的后端接口,接口返回数据中会直接包含总商品数、单页商品数,直接计算即可得到总页数,性能远高于Selenium方案。
请求时建议携带正常的User-Agent请求头,控制请求频率避免被站点限制访问。
内容的提问来源于stack exchange,提问作者DannyyP
相关产品推荐
相关产品推荐

