Python Selenium爬虫超时求助:地产数据爬取失败
排查Selenium TimeoutException及地产数据爬取问题
针对你遇到的超时问题,结合新手爬取这类地产网站的常见坑,给你几个具体的排查方向:
1. 确认元素定位是否准确
- 打开目标网站的开发者工具(F12),找到你要提取的
Land_Use、Property_Class等元素,核对代码里用的XPath/CSS选择器是否和实际元素匹配。很多网站的元素会有动态生成的class或id(比如带随机字符串),直接抄静态路径肯定找不到。 - 如果目标数据在iframe里,必须先切换到对应iframe才能定位元素,代码示例:
iframe = driver.find_element(By.TAG_NAME, 'iframe') driver.switch_to.frame(iframe) # 之后再定位目标元素
2. 检查页面交互逻辑是否完整
- 你只提到把Parcel ID填入对应列,但有没有触发搜索操作?有些网站需要点击「查询」按钮或按回车键才会加载数据。如果只是填了ID就直接提取数据,页面根本没开始加载目标内容,自然会超时。
- 填完ID后,可以加一步点击搜索按钮或模拟回车的操作:
input_box = driver.find_element(By.ID, 'parcel-id-input') input_box.send_keys(parcel_id) input_box.send_keys(Keys.ENTER) # 或者点击搜索按钮元素
3. 调整等待策略,适配异步加载
- 这类地产网站大多是异步加载数据——页面HTML骨架加载完了,但实际地产数据还在请求中。用全局等待或固定sleep都不靠谱,应该用显式等待针对每个目标元素设置等待:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 等待Land_Use元素出现,最长等20秒 land_use = WebDriverWait(driver, 20).until( EC.presence_of_element_located((By.XPATH, '//*[@id="land-use"]')) ).text - 如果页面加载慢,还可以调整浏览器加载策略,让Selenium不用等所有资源加载完:
options = webdriver.ChromeOptions() options.page_load_strategy = 'eager' # 只等待DOM加载完成 driver = webdriver.Chrome(options=options)
4. 排查反爬限制
- 很多政府类网站会检测Selenium特征,识别出自动化工具后就不返回数据。可以试试添加这些配置绕过检测:
options = webdriver.ChromeOptions() options.add_argument('--headless=new') # 无头模式,可选 options.add_argument('--disable-blink-features=AutomationControlled') options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False) driver = webdriver.Chrome(options=options) # 还可以加随机等待,模拟人类操作 import random import time time.sleep(random.uniform(1, 3))
5. 用调试手段定位问题
- 在超时的代码前加截图,查看页面状态:
driver.save_screenshot('debug.png'),比如是不是页面跳转到了验证码页,或者搜索后显示「无数据」,这些都会导致元素找不到超时。 - 打印页面源码:
print(driver.page_source),搜索你要的字段,确认目标数据是否真的在页面里。
内容的提问来源于stack exchange,提问作者IIzzy
相关产品推荐
相关产品推荐

