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

如何用Python爬取Espacenet搜索结果中的专利链接?

解决Espacenet专利链接爬取问题

可以爬取Espacenet的专利链接和标题,你遇到的问题核心是Cloudflare反爬拦截以及动态内容加载处理不到位,下面是可行的解决方案:

  • 绕过Cloudflare反爬检测
    普通Selenium容易被Cloudflare识别拦截,改用undetected-chromedriver工具,它会自动配置浏览器参数绕过检测,避免返回无效的Cloudflare跳转链接。

  • 正确处理动态加载内容
    Espacenet的搜索结果采用滚动加载机制,需确保103条结果全部加载完成后再提取数据:

    1. 启动浏览器访问目标搜索页,等待页面核心元素加载完毕
    2. 模拟滚动页面到底部,循环执行直到页面高度不再变化(即所有结果加载完成)
    3. 定位专利条目对应的HTML元素(通常每个条目包含标题和详情链接),提取标题文本和完整链接(需拼接域名https://worldwide.espacenet.com)
  • 示例代码
    先安装依赖:

    pip install undetected-chromedriver pandas
    

    爬取代码示例:

    import undetected_chromedriver as uc
    import pandas as pd
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    import time
    
    # 初始化浏览器
    driver = uc.Chrome()
    # 替换为你的Espacenet搜索结果URL
    search_url = "你的搜索结果页面URL"
    driver.get(search_url)
    
    # 等待页面核心元素加载
    WebDriverWait(driver, 20).until(
        EC.presence_of_element_located((By.CLASS_NAME, "result-item"))
    )
    
    # 滚动加载所有结果
    last_height = driver.execute_script("return document.body.scrollHeight")
    while True:
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        time.sleep(3)
        new_height = driver.execute_script("return document.body.scrollHeight")
        if new_height == last_height:
            break
        last_height = new_height
    
    # 提取专利标题和链接
    patent_items = driver.find_elements(By.CLASS_NAME, "result-item")
    patent_data = []
    for item in patent_items:
        title_elem = item.find_element(By.TAG_NAME, "h3")
        link_elem = title_elem.find_element(By.TAG_NAME, "a")
        patent_title = title_elem.text.strip()
        patent_link = "https://worldwide.espacenet.com" + link_elem.get_attribute("href")
        patent_data.append({"标题": patent_title, "链接": patent_link})
    
    # 转换为DataFrame
    df = pd.DataFrame(patent_data)
    print(df)
    
    # 关闭浏览器
    driver.quit()
    
  • 关于JSONDecodeError的说明
    Espacenet的接口逻辑和Google专利完全不同,直接套用Google专利的请求方式必然失败,必须通过浏览器渲染的方式获取动态加载的页面内容。

内容的提问来源于stack exchange,提问作者Anna Gromovich

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 07:05:04