有没有一种方法可以使用post方法指定请求的长度?

时间:2019-10-21 16:22:23

标签: python beautifulsoup python-requests

我正在从investing.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年代初期收集数据时,行数应该大大增加。有什么进展提示吗?

1 个答案:

答案 0 :(得分:0)

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

params:{
limit: "0,200"
}

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