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:
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:
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:
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?