J'essaye de gratter un site web, dans lequel je dois aller à la bonne page en utilisant une requête POST.Demandes Python - débogage des requêtes POST
Ci-dessous sont les différents écran montrant comment je suis arrivé à trouver quels sont les en-têtes et la charge utile que je devais utiliser dans ma demande:
1) Voici la page: il est une liste d'indicateurs économiques:
2) Il est possible de sélectionner l'indicateur du pays sont affichés à l'aide du « filtre qui est sur le côté droit de l'écran:
3) Cliquer sur le bouton "Appliquer" enverra une requête POST au site qui actualisera la page pour afficher uniquement les informations des cases cochées. Voici un screencapture montrant les éléments du formulaire envoyé dans la requête POST:
Mais si j'essaie de faire cette demande POST en utilisant les demandes de python en utilisant le code suivant (voir ci-dessous), il semble que la forme est pas traité, et la page retournée est simplement celle par défaut.
payload= {
'country[]': 5,
'limit_from': '0',
'submitFilters': '1',
'timeFilter': 'timeRemain',
'currentTab': 'today',
'timeZone': '55'}
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest',
'Accept':'*/*',
'Accept-Encoding':'gzip, deflate, br',
'Accept-Language':'en-US,en;q=0.8',
'Connection':'keep-alive',
'Host':'www.investing.com',
'Origin':'https://www.investing.com',
'Referer':'https://www.investing.com/economic-calendar/',
'Content-Length':'94',
'Content-Type':'application/x-www-form-urlencoded',
'Cookie':'adBlockerNewUserDomains=1505902229; __qca=P0-734073995-1505902265195; __gads=ID=d69b337b0f60d8f0:T=1505902254:S=ALNI_MYlYKXUUbs8WtYTEO2fN9O_q9oykA; cookieConsent=was-set; travelDistance=4; editionPostpone=1507424197769; PHPSESSID=v9q2deffu2n0b9q07t3jkgk4a4; StickySession=id.71595783179.419www.investing.com; geoC=GB; gtmFired=OK; optimizelySegments=%7B%224225444387%22%3A%22gc%22%2C%224226973206%22%3A%22direct%22%2C%224232593061%22%3A%22false%22%2C%225010352657%22%3A%22none%22%7D; optimizelyEndUserId=oeu1505902244597r0.8410692836488942; optimizelyBuckets=%7B%228744291438%22%3A%228731763165%22%2C%228785438042%22%3A%228807365450%22%7D; nyxDorf=OT5hY2M1P2E%2FY24xZTE3YTNoMG9hYmZjPDdlYWFnNz0wNjNvYW5kYWU6PmFvbDM6Y2Y0MDAwYTk1MzdpYGRhPDk2YTNjYT82P2E%3D; billboardCounter_1=1; _ga=GA1.2.1460679521.1505902261; _gid=GA1.2.655434067.1508542678'
}
import lxml.html
import requests
g=requests.post("https://www.investing.com/economic-calendar/",data=payload,headers=headers)
html = lxml.html.fromstring(g.text)
tr=html.xpath("//table[@id='economicCalendarData']//tr")
for t in tr[4:]:
print(t.find(".//td[@class='left flagCur noWrap']/span").attrib["title"])
Ceci est visible comme si, par exemple, je sélectionne seul pays « 5 » (Etats-Unis), poster la demande, et rechercher les pays présents dans la page de résultats, je verrai d'autres pays .
Quelqu'un sait ce que je fais mal avec cette demande POST?