2017-10-21 95 views
0

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:

enter image description here

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:

enter image description here

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:

enter image description here

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?

Répondre

1

Comme il montre dans votre capture d'écran, il semble que les messages du site à l'URL

https://www.investing.com/economic-calendar/Service/getCalendarFilteredData

alors que vous publiez seulement directement à

https://www.investing.com/economic-calendar/