You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:54:03