Ich arbeite an einem einfachen Web-Scraper in Python 3, aber wenn ich eine Get- oder Post-Anfrage sende, lautet die Antwort 403. In Python 2 funktioniert dies jedoch einwandfrei. Ich verwende in beiden Versionen dieselbe Version von Anforderungsbibliotheken. Ich habe es auch mit versucht, Verify=False/True
aber der Unterschied in beiden Versionen bleibt bestehen.
Anfragen = 2.22.0
certifi = 2019.9.11
from requests import get
url = 'https://www.gamestop.com/'
header = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'en-US,en;q=0.5',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0',
'DNT': '1',
'Upgrade-Insecure-Requests': '1',
'Connection': 'keep-alive',
'Host': 'www.gamestop.com'
}
res = get(url, headers=header, verify=False).status_code
print(res)
# 403 when using python 3.7.4
# 200 when using python 2.7.16
Bearbeiten von @blhsing:
In der folgenden Liste wird nachverfolgt, welche bestimmten Python-Versionen funktionieren und welche Versionen gemäß den Kommentaren fehlschlagen. Bisher waren Erfolge und Misserfolge für jede spezifische Python-Version plattformübergreifend konsistent.
Sie können diesen Abschnitt der Frage mit Ihren eigenen Ergebnissen und den spezifischen Python-Versionen bearbeiten, mit denen die Ergebnisse erstellt wurden.
2.7.14 works (blhsing)
2.7.16 works (repl.it)
3.6.5 works (blhsing)
3.6.8 fails (Reinderien and blhsing)
3.7.3 works (wim and blhsing)
3.7.4 fails (repl.it and blhsing)
3.8.0 fails (OP)
Demo auf repl.it: Python 2.7.16 und Python 3.7.4
ssl.OPENSSL_VERSION
). Sie brauchen nicht alle diese Header, um zu reproduzieren, nur eine einfache alte get (url) wird es tun.