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

Python爬虫获取拉脱维亚政府财务数据返回空HTML求助

解决拉脱维亚市政财务数据爬取返回空内容的问题

作为经常处理网页爬取问题的开发者,我来给你梳理几个核心解决方向,以及对应的参考资料方向:

1. 优先处理地域访问限制

你提到网站仅拉脱维亚境内可访问,这大概率是导致请求返回空内容的核心原因之一。即使状态码是200,网站也可能根据IP地址直接返回空响应而非拒绝访问。

  • 解决思路:使用拉脱维亚境内的代理服务器或VPN来发起请求。在requests中配置代理的示例代码如下:
    import requests
    from bs4 import BeautifulSoup
    
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'}
    proxies = {
        'http': 'http://your-latvian-proxy-address:port',
        'https': 'https://your-latvian-proxy-address:port'
    }
    ajax_url = 'https://e2.kase.gov.lv/pub5.5_pasv/code/ajax.php?module=pub&job=getDoc&period_id=1626&org_id=2542&blank_id=200079&currency_id=2&editable=0&type=HTML'
    
    r = requests.get(ajax_url, headers=headers, proxies=proxies)
    print(r.text)
    
  • 注意:尽量选择可靠的住宅代理,避免使用公开代理(容易被网站识别拦截)。

2. 补充完整的请求头字段

除了User-Agent,网站可能还校验Referer、Cookie、Accept、Accept-Language等请求头字段,缺少这些字段会导致服务器返回空内容。

  • 解决思路:在Chrome开发者工具的网络面板中,找到该AJAX请求,复制完整的请求头信息,补充到你的代码里。比如补充后的headers可能是这样:
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
        'Referer': 'https://e2.kase.gov.lv/pub5.5_pasv/code/pub.php?module=pub',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Accept-Language': 'lv-LV,lv;q=0.8,en-US;q=0.5,en;q=0.3',
        'Cookie': 'your-cookie-value-copied-from-chrome'
    }
    
  • 提示:Cookie可能会过期,建议先请求主页面获取最新的Cookie,再发起AJAX请求。

3. 使用会话保持状态

部分网站会要求请求必须来自同一个会话(即带有相同的Session ID),直接请求AJAX接口可能会被判定为非法请求。

  • 解决思路:使用requests的Session对象来保持会话,先访问主页面建立会话,再请求AJAX接口:
    import requests
    from bs4 import BeautifulSoup
    
    session = requests.Session()
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'}
    
    # 先访问主页面,建立会话并获取Cookie
    main_url = 'https://e2.kase.gov.lv/pub5.5_pasv/code/pub.php?module=pub'
    session.get(main_url, headers=headers)
    
    # 再请求AJAX接口
    ajax_url = 'https://e2.kase.gov.lv/pub5.5_pasv/code/ajax.php?module=pub&job=getDoc&period_id=1626&org_id=2542&blank_id=200079&currency_id=2&editable=0&type=HTML'
    r = session.get(ajax_url, headers=headers)
    print(r.text)
    

4. 动态内容渲染排查(备选)

如果以上方法都无效,可以排查是否需要JavaScript渲染才能获取内容。虽然你说Chrome直接访问URL能显示,但部分网站可能会在后端做UA或环境校验,只有真实浏览器环境才返回内容。

  • 解决思路:使用Selenium或Playwright模拟真实浏览器请求,示例代码(Selenium):
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    options = Options()
    options.add_argument('--headless=new')  # 无头模式,不弹出浏览器窗口
    options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36')
    # 如果需要代理,添加以下参数
    # options.add_argument('--proxy-server=http://your-latvian-proxy:port')
    
    driver = webdriver.Chrome(options=options)
    ajax_url = 'https://e2.kase.gov.lv/pub5.5_pasv/code/ajax.php?module=pub&job=getDoc&period_id=1626&org_id=2542&blank_id=200079&currency_id=2&editable=0&type=HTML'
    driver.get(ajax_url)
    print(driver.page_source)
    driver.quit()
    

参考资料方向

  • Requests官方文档:深入学习请求头配置、会话管理、代理设置等基础爬取操作,掌握库的核心功能。
  • Chrome开发者工具官方指南:学会如何查看和复制网络请求的完整参数,包括请求头、Cookie、Query参数等,这是爬取前的必备技能。
  • 《Web Scraping with Python》书籍:系统了解常见反爬机制(地域限制、请求校验等)的应对方法,适合新手进阶学习。
  • Selenium/Playwright官方文档:如果需要模拟浏览器,学习这两个工具的基础使用,掌握动态内容爬取的方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:05:31