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

使用MechanicalSoup提交LOVD搜索表单未获预期结果求助

解决LOVD网站AJAX搜索的Python爬虫问题

嘿,我来帮你搞定这个LOVD网站的搜索抓取问题!作为生信领域的网页抓取新手,遇到AJAX异步请求的坑太正常了,我一步步给你拆解问题和解决方案:

为什么MechanicalSoup没生效?

LOVD的搜索表单是通过AJAX异步提交的——也就是说当你点击搜索按钮时,页面不会整体刷新,而是由JavaScript在后台悄悄发送请求获取结果,再把结果渲染到页面上。而MechanicalSoup只是模拟了传统的表单同步提交(也就是页面跳转式提交),但这个表单的默认提交行为已经被JavaScript覆盖了,所以你提交后还是回到原页面——根本没触发真正的搜索请求。

为什么你的Requests代码报错?

你的Requests代码有两个关键问题:

  1. 请求方式错了:你用了get()方法,但AJAX搜索请求是POST类型,服务器只接受POST的表单数据,直接用GET会被拒绝,返回错误提示。
  2. 缺少必要的请求头和表单字段:服务器会验证请求是否来自合法的浏览器/AJAX调用,你需要添加上X-Requested-With这类AJAX标识头,还有可能漏了表单里的隐藏字段(比如search_type)。

修正后的Requests解决方案

下面是能正常获取搜索结果的代码,我已经帮你补全了关键细节:

import requests
from bs4 import BeautifulSoup

# 基础URL
base_url = "http://www.lovd.nl/3.0/search"
ajax_search_url = "http://www.lovd.nl/3.0/ajax/search_variant.php"

# 初始化会话,自动保持Cookie和会话状态
session = requests.Session()

# 第一步:访问搜索页面,获取CSRF Token和必要的Cookie
response = session.get(base_url)
soup = BeautifulSoup(response.text, "html.parser")
csrf_token = soup.select_one('form#websitevariantsearch input[name="csrf_token"]')['value']

# 第二步:构造完整的表单数据(和开发者工具里的Form Data完全一致)
form_data = {
    "csrf_token": csrf_token,
    "build": "hg19",
    "variant": "chr15:g.40699840C>T",
    "search": "",
    "search_type": "variant",  # 页面表单里的隐藏字段,必须带上
    "limit": "100",  # 控制返回结果数量,可按需调整
}

# 第三步:设置请求头,模拟浏览器的AJAX请求
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
    "Referer": base_url,  # 告诉服务器请求来自搜索页面
    "X-Requested-With": "XMLHttpRequest",  # 标识这是AJAX请求
}

# 第四步:发送POST请求获取结果
response = session.post(ajax_search_url, data=form_data, headers=headers)

# 打印结果(如果是HTML,你可以用BeautifulSoup解析提取需要的生信信息)
print(response.text)

关键知识点提醒

  1. AJAX请求的本质:AJAX就是后台发送的普通HTTP请求,只是由JavaScript触发、不需要刷新页面。你只需在开发者工具的「网络」面板里找到对应的XHR请求,复制它的请求方式、表单数据、请求头,用Requests模拟就行。
  2. 会话保持:用requests.Session()可以自动管理Cookie,避免每次请求都重新获取CSRF Token,也更符合浏览器的正常行为。
  3. 合规性:使用前请查看LOVD网站的使用条款,不要频繁发送请求,避免被封禁IP,影响正常的科研使用。

内容的提问来源于stack exchange,提问作者Marco Pietrosanto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:49:27