Python Selenium爬取黄页网站仅能获取前4条联系方式数据求助
问题根因
目标站点采用懒加载渲染规则:企业名称对应的h2标签在页面初始化时就会全部写入DOM,所以可以正常爬取全部结果;但电话号码等联系方式只有进入浏览器视口的条目才会完成渲染,默认仅首屏4条数据有完整的.mod-AdresseKompakt__phoneNumber节点内容,未出现在可视区域的条目对应节点属性为空,因此只能拿到前4条结果。
修正点
- 新增页面滚动逻辑,逐段触发懒加载,确保所有企业条目都进入视口完成渲染
- 补全cookie按钮的等待逻辑,避免节点未加载导致的点击报错
- 修正异常捕获块中
driver.quit未加括号的语法问题,移除重复导入的冗余代码 - 增加电话号码节点的加载等待逻辑,确保所有节点加载完成后再执行爬取
可运行代码
from selenium import webdriver import time from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC PATH = "C:/Program Files (x86)/Chromedriver.exe" driver = webdriver.Chrome(PATH) driver.get("https://www.gelbeseiten.de/Suche/KFZ/50968") try: # 等待列表容器加载完成 WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "gs_treffer")) ) # 等待cookie按钮可点击后执行点击 cookie_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.ID, "cmpbntyestxt")) ) cookie_btn.click() # 滚动页面触发懒加载,滚动次数可根据实际数据量调整 for i in range(3): driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(2) # 等待页面加载新内容 # 爬取全部企业名称 Firma = driver.find_elements(By.CSS_SELECTOR, "h2") for firma in Firma: print(firma.text) # 爬取全部电话号码 PLZ = driver.find_elements(By.CLASS_NAME, "mod-AdresseKompakt__phoneNumber") for plz in PLZ: print(plz.text) except Exception as e: print(f"运行异常: {e}") finally: driver.quit()
内容的提问来源于stack exchange,提问作者SecretPutin
相关产品推荐
相关产品推荐

