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

Python3.10+Requests+BeautifulSoup爬取汇率数据:页面无法更新

解决sanarate.ir指定波斯历日期汇率抓取问题

问题核心是你只传递了日期参数,但网站的POST请求需要多个动态生成的参数(比如CSRF令牌、页面状态参数等)才能正确触发数据查询,仅传日期会被服务器判定为无效请求,返回首页数据。

解决步骤:

  1. 抓取完整POST参数
    用Chrome开发者工具重新监控请求:

    • 打开网站,输入测试日期(比如1401/11/16),点击查询按钮
    • 在Network面板里找到对应的POST请求(通常提交到当前页面或特定接口)
    • 查看Form Data或Payload部分,记录所有参数(比如可能有csrfmiddlewaretoken、date、隐藏字段等)
  2. 从初始页面提取动态参数
    这些动态参数(比如CSRF令牌)通常嵌入在首页HTML中,需要先发送GET请求获取首页,用正则或BeautifulSoup提取。

  3. 构造完整POST请求
    将提取到的动态参数和目标波斯历日期一起放入请求体,发送POST请求。

代码示例(Python + requests):

import requests
from bs4 import BeautifulSoup

# 目标网站URL
base_url = "http://www.sanarate.ir/"
target_date = "1401/11/16"  # 测试日期

# 第一步:获取首页,提取动态参数
session = requests.Session()  # 用Session维持会话,自动处理Cookie
response = session.get(base_url)
soup = BeautifulSoup(response.text, "html.parser")

# 提取CSRF令牌(根据实际页面字段名调整,比如可能是csrfmiddlewaretoken)
csrf_token = soup.find("input", {"name": "csrfmiddlewaretoken"})["value"]

# 第二步:构造完整POST参数(根据开发者工具抓到的参数补充)
post_data = {
    "csrfmiddlewaretoken": csrf_token,
    "date": target_date,
    "submit": "جستجو"  # 替换成页面查询按钮的实际value(波斯语查询)
    # 补充其他抓到的参数,比如隐藏字段、状态参数等
}

# 第三步:发送POST请求
headers = {
    "Referer": base_url,  # 必须带上Referer模拟浏览器行为
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}
result_response = session.post(base_url, data=post_data, headers=headers)

# 处理返回结果,提取汇率数据
result_soup = BeautifulSoup(result_response.text, "html.parser")
# 根据页面实际结构提取表格数据,示例如下
exchange_table = result_soup.find("table")
if exchange_table:
    rows = exchange_table.find_all("tr")[1:]  # 跳过表头
    for row in rows:
        cols = row.find_all("td")
        if len(cols) >= 2:
            currency = cols[0].text.strip()
            rate = cols[1].text.strip()
            print(f"{currency}: {rate}")

注意事项:

  • 必须根据开发者工具抓到的实际参数补充post_data,比如部分网站会有__VIEWSTATE这类ASP.NET动态参数,都要从首页提取
  • 保持会话(Session)连贯,Cookie中可能包含会话状态信息
  • 请求头尽量贴近浏览器,避免被反爬拦截

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 21:15:35