如何用Python Selenium在JS网站输入搜索文本并抓取邮编数据
Python Selenium 动态站点邮编抓取实现方案
针对JS动态渲染导致静态爬取无法拿到完整数据的问题,直接通过Selenium模拟浏览器完整执行页面JS、完成交互操作即可实现需求,具体实现如下:
前置依赖安装
先安装需要的Python包,执行以下命令:
pip install selenium webdriver-manager
webdriver-manager会自动匹配当前系统安装的Chrome版本下载对应驱动,不需要手动下载配置chromedriver。
核心实现逻辑
- 初始化带基础反检测配置的Chrome浏览器实例,支持无头模式后台运行
- 访问目标搜索页,等待页面初始JS渲染完成后定位搜索输入框
- 输入目标地址,提交搜索请求
- 显式等待搜索结果加载完成,避免JS未渲染就提取元素导致报错
- 定位结果中的Eircode字段提取文本
- 将结果写入本地txt文件,操作完成后关闭浏览器释放资源
完整可运行代码
from selenium import webdriver from selenium.webdriver.chrome.service import Service as ChromeService from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 浏览器配置 options = webdriver.ChromeOptions() # 无头模式,不需要弹出浏览器窗口,调试时可以注释掉这行看可视化操作过程 options.add_argument("--headless=new") options.add_argument("--disable-blink-features=AutomationControlled") options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36") # 初始化驱动 driver = webdriver.Chrome( service=ChromeService(ChromeDriverManager().install()), options=options ) # 设置最长10秒显式等待 wait = WebDriverWait(driver, 10) if __name__ == "__main__": target_url = "https://eircode-finder.com/search/" search_address = "8 old bawn court tallaght dublin" save_path = "eircode_result.txt" try: # 打开目标页面 driver.get(target_url) # 定位搜索框,输入地址 search_input = wait.until( EC.element_to_be_clickable((By.CSS_SELECTOR, "input#address, input[name='address'], input[type='search']")) ) search_input.clear() search_input.send_keys(search_address) # 提交搜索 search_input.submit() # 等待邮编结果加载完成,提取内容 eircode_ele = wait.until( EC.presence_of_element_located((By.CSS_SELECTOR, ".eircode, .postal-code, span[class*='result-eircode']")) ) eircode = eircode_ele.text.strip() # 写入txt文件 with open(save_path, "w", encoding="utf-8") as f: f.write(f"搜索地址:{search_address}\n对应Eircode:{eircode}\n") print(f"抓取完成,邮编{eircode}已保存到{save_path}") except Exception as e: print(f"运行出错:{str(e)},可打开浏览器调试工具检查元素选择器是否匹配当前页面结构") finally: # 无论成功失败都关闭浏览器 driver.quit()
常见问题调整
- 如果运行时报元素找不到的错误,先注释掉无头模式参数,肉眼确认页面加载流程,打开F12检查搜索框、邮编结果对应的实际CSS选择器,替换代码里的选择器即可
- 不要用固定时长的
time.sleep()做等待,显式等待会在元素加载完成后立刻执行下一步,效率更高也更稳定 - 如果触发站点反爬,可以适当在搜索、提交步骤增加1-2秒的随机间隔,或者更换代理IP
- 批量查询时注意控制请求频率,短时间大量请求容易被站点拦截
内容的提问来源于stack exchange,提问作者hina fraz
相关产品推荐
相关产品推荐

