首页 > 解决方案 > 有没有办法用 post 方法指定请求的长度?

问题描述

我正在从invest.com 上抓取经济日历表。我正在使用美丽的汤并请求图书馆。我使用 post 方法进行查询,但似乎无法找到一种方法来获取包含表中超过 200 行的数据响应。

如果您在更新表过滤器时查看网络流量,您可以看到有一个“getCalendarFilteredData”请求。我基于此发布请求。我尝试更改代码中显示的标题和查询参数,但我无法弄清楚。我可以使用一些帮助。这就是我所拥有的:

url = 'https://in.investing.com/economic-calendar/Service/getCalendarFilteredData'
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
                        '(KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36',
          "x-requested-with": "XMLHttpRequest"
          }

query = {
            "country[]": [17, 25, 6, 37, 5, 72, 22, 39, 35, 4],
            "importance[]": [1, 2, 3],
            "dateFrom": start_date,
            "dateTo": current_date,
            "timeZone": 58,
        }

对于请求:

with requests.Session() as s:
    try:
        web = s.post(url, headers=header, data=query)
        soup = BeautifulSoup(web.json()['data'], 'html.parser')
        rows = soup.find_all('tr', {'class': 'js-event-item'})

将数据插入熊猫数据框后,无论参数是什么,我都会得到这个大小。

[200 行 x 7 列]

当我试图从 2000 年代初期抓取数据时,行数应该会大得多。关于如何进步的任何提示?

标签: pythonbeautifulsouppython-requests

解决方案


查询有限制,您可以在“getCalendarFilteredData”响应中看到它。

params:{
limit: "0,200"
}

您可以通过发送获取下一组params:{"limit_from":2) 如果您查看表单数据,您可以在 getCalendarFilteredData 请求中看到它。我已经测试并能够通过每次将 limit_from 参数增加 1 来获得不同的数据。


推荐阅读