suchen

Heim  >  Fragen und Antworten  >  Hauptteil

python – Benutzeragent zur Lösung von 403 hinzugefügt, aber die Verwendung von urlretrieve führt zu einem regelmäßigen Übereinstimmungsfehler

Ich möchte ein kleines Programm schreiben, um die Webseite http://www.sse.com.cn/assortm automatisch herunterzuladen. Der darin enthaltene Download-Link lautet http://query.sse.com.cn/secur.
Verwenden Sie urllib, um 403 aufzufordern, also habe ich den Benutzeragenten hinzugefügt und 200 zurückgegeben, aber bei der Verwendung von urlretrieve wurde die Antwort online nicht gefunden.

Der Code lautet wie folgt:

aus der URL-Importanfrage

aus Datum/Uhrzeit Import Datum/Uhrzeit

-- Codierung:utf-8 --

url = 'http://query.sse.com.cn/secur...'

user_agent = 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, wie Gecko) Chrome/55.0.2883.95 Mobile Safari/537.36'

myheaders = {'Benutzer – Agent': user_agent}

req = request.Request(url, headers=myheaders)

local = "/Users/Mty/Downloads/s_data/" + str(datetime.now().date()) + " .xls"

request.urlretrieve(req, local)

Fehlerbericht:

Traceback (letzter Aufruf zuletzt):
Datei „/Users/Mty/PycharmProjects/get_data/date.py“, Zeile 20, in <module>

request.urlretrieve(req, local)

Datei „/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/urllib/request.py“, Zeile 186, in urlretrieve

url_type, path = splittype(url)

Datei „/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/urllib/parse.py“, Zeile 861, im Splittype

match = _typeprog.match(url)

TypeError: erwartete Zeichenfolge oder byteähnliches Objekt

迷茫迷茫2753 Tage vor1326

Antworte allen(1)Ich werde antworten

  • 淡淡烟草味

    淡淡烟草味2017-05-18 10:49:01

    使用request.build_opener 添加head可解决

    myheaders = [('User - Agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.17'
                                  ' (KHTML, like Gecko) Version/3.1 Safari/525.17'),]
    opener = request.build_opener()
    opener.addheaders = myheaders
    request.install_opener(opener)
    
    request.urlretrieve(url, local)

    Antwort
    0
  • StornierenAntwort