2017-10-21 2 views
0

Ich versuche, eine Website zu kratzen, in der ich mit einer POST-Anfrage auf die richtige Seite zu bekommen.Python Requests - debuggen POST-Anfragen

Hier unten die verschiedenen Bildschirm zeigen, wie ich finde bekam, an denen die Header und Nutzlast, die ich in meiner Anfrage verwenden benötigt:

1) Hier ist die Seite: es ist eine Liste von Wirtschaftsindikatoren:

enter image description here

2) Es ist möglich, in welchem ​​Land die Anzeige zu wählen sind angezeigt, um den „Filter verwenden, die auf der rechten Seite des Bildschirms:

enter image description here

3) Durch Klicken auf die Schaltfläche "Anwenden" werden POST-Anfragen an die Site gesendet, die die Seite aktualisieren, sodass nur die Informationen der angekreuzten Felder angezeigt werden. Hier ist ein Screencapture, die Elemente der Form, in der POST-Anfrage gesendet zeigt:

enter image description here

Aber wenn ich versuche, diese POST-Anforderung zu tun Python-Anfragen mit dem folgenden Code (siehe unten) scheint es, dass die Form ist, nicht verarbeitet, und die zurückgegebene Seite ist einfach die Standardseite.

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"]) 

Dies ist sichtbar, als ob ich zum Beispiel nur Land „5“ wählen (die USA), buchen Sie den Antrag, und suchen Sie nach den Ländern, die in der Ergebnisseite, ich auch andere Länder sehen .

Wer weiß, was ich mit dieser POST-Anfrage falsch mache?

Antwort

1

Wie es in Ihrem eigenen Screenshot zeigt, scheint es, dass die Website-Beiträge an die URL

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

während Sie nur direkt an

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

Posting
Verwandte Themen