Python爬虫:mjzj.com新版JS渲染搜索页如何判断查询结果是否存在
爬虫代码调整方案
核心原因
原有代码使用
urlopen只能拉取静态HTML内容,新版页面采用JavaScript客户端渲染,初始返回的HTML没有实际业务元素,必须等待JS执行完成后才能拿到你要判断的按钮元素。
调整方案(两种可选)
方案1:无头浏览器模拟渲染(兼容性最好,无需抓包)
- 先安装依赖:
pip install selenium beautifulsoup4 webdriver-manager
- 调整后的代码示例:
from selenium import webdriver from selenium.webdriver.chrome.service import Service 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 # 替换为实际查询关键词 query = "你的查询内容" target_url = f"https://mjzj.com/newmjzj/checkevaluate?query={query}" # 配置无头Chrome chrome_options = webdriver.ChromeOptions() chrome_options.add_argument("--headless=new") chrome_options.add_argument("--disable-gpu") chrome_options.add_argument("--no-sandbox") driver = webdriver.Chrome( service=Service(ChromeDriverManager().install()), options=chrome_options ) result_exists = False try: driver.get(target_url) # 最多等待5秒直到目标按钮加载完成,把btn-class替换为你要找的按钮的实际class属性值 WebDriverWait(driver, 5).until( EC.presence_of_element_located((By.CLASS_NAME, "btn-class")) # 也可以用其他定位方式,比如按按钮文本:By.XPATH, '//button[text()="你要找的按钮文本"]' ) result_exists = True except: result_exists = False finally: driver.quit() print(f"查询结果是否存在:{result_exists}")
方案2:直接调用后台接口(效率更高)
- 打开浏览器F12开发者工具,切换到「网络」面板,执行一次搜索,筛选XHR/ Fetch请求,找到返回搜索结果的后台接口
- 直接用
requests库模拟请求该接口,根据返回的JSON字段判断是否有结果即可,无需启动浏览器解析页面
内容的提问来源于stack exchange,提问作者Vicks
相关产品推荐
相关产品推荐

