动态网站表格数据爬取失败求助
动态网站表格数据爬取失败求助
嘿,我来帮你排查下爬取这个表格数据的问题~
你目前的代码里有几个容易踩的坑,我给你拆解下:
首先,你用By.CLASS_NAME传入"tdStone odd"是不对的哦!因为tdStone和odd是两个独立的CSS类名,By.CLASS_NAME一次只能指定单个类名,带空格的话Selenium会识别成无效的类名,自然找不到元素。
另外,这个网站是动态加载的,直接调用find_elements可能会因为元素还没渲染完成就执行查找,导致返回空列表。咱们得加上显式等待,确保元素加载好再去抓取。
给你调整后的代码参考:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 初始化Chrome驱动 driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) # 打开目标网页 url = "https://www.diamondsfactory.co.uk/design/combined-band-look-diamond-engagement-ring-clrn0717801" driver.get(url) try: # 显式等待,最多等10秒,直到带tdStone类的元素加载完成 # 如果要找同时带tdStone和odd的行,用CSS选择器".tdStone.odd" # 如果要找所有tdStone的行,就用".tdStone" rows = WebDriverWait(driver, 10).until( EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".tdStone.odd")) ) # 提取每一行的文本内容 for row in rows: print(row.text) finally: # 记得关闭浏览器 driver.quit()
再给你几个小提醒:
- 如果要抓取整个表格的所有行,不管是odd还是even样式的,把CSS选择器改成
".tdStone"就行,这样能覆盖所有石头相关的行 - 要是页面需要滚动才能加载出表格,还得加上滚动操作,比如
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);"),不过先试试上面的代码,大概率能解决问题
备注:内容来源于stack exchange,提问作者user25346712
相关产品推荐
相关产品推荐

