使用Selenium进行数据爬取仅返回首个结果的问题求助
问题分析与解决方案
核心问题
你的代码里用的XPATH //*[@id="2107093"]/div/div[1]/div[2]/h3 绑定了单个条目的唯一ID(2107093),这是第一个条目的专属ID,所以find_elements只能匹配到这一个元素,自然只能拿到首个条目数据。
修正方案
改用通用的选择器定位所有条目,步骤如下:
- 先等待页面上所有条目容器加载完成(而非单个条目)
- 用相对路径定位每个条目内的标题元素
修正后的代码
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 from selenium.common.exceptions import TimeoutException driver = webdriver.Chrome() url = 'https://www.bizbuysell.com/new-jersey-businesses-for-sale/?q=Y2Zmcm9tPTIwMDAwMCZwdG89NjAwMDAw' driver.get(url) try: # 等待所有条目容器加载完成(匹配所有class为listing-item的元素) wait = WebDriverWait(driver, 10) wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, 'listing-item'))) # 定位每个条目内的标题元素(通过条目容器的相对路径) all_titles = [] titles = driver.find_elements(By.XPATH, '//div[@class="listing-item"]//div[@class="listing-title"]/h3') for title in titles: all_titles.append(title.text.strip()) print(all_titles) except TimeoutException: print("等待元素加载超时。") finally: driver.quit()
关键改动说明
- 等待条件改为
EC.presence_of_all_elements_located,确保页面上所有条目都已加载 - 定位标题的XPATH改为
//div[@class="listing-item"]//div[@class="listing-title"]/h3,通过条目容器的通用class(listing-item)匹配所有条目,再定位每个条目内的标题 - 加入
strip()去除标题文本的多余空格
内容的提问来源于stack exchange,提问作者Daniel Tobi
相关产品推荐
相关产品推荐

