Python 3 URL-Request?

Gast #6840693
Lesenswert?

Funktioniert. In html stehen die Daten.
1
import urllib.request
2

3
with urllib.request.urlopen('https://duckduckgo.com/') as response:
4
    html = response.read()


Funktioniert nicht. Warum kommt die Fehlermeldung bei einem Request? Wo 
ist der Unterschied zu einem Browser bei dem sie nicht kommt?
1
with urllib.request.urlopen('https://mikrocontroller.net/') as response:
2
    html = response.read()

Fehlermeldung.
1
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
2
urllib.error.HTTPError: HTTP Error 403: Forbidden
#6840751
Lesenswert?

Nein, kein UserAgent angegeben. Viele Webserver rejecten dann.
1
import urllib.request
2
req = urllib.request.Request(
3
    "https://www.mikrocontroller.net/", 
4
    data=None, 
5
    headers={
6
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'
7
    }
8
)
9

10
with urllib.request.urlopen(req) as response:
11
    html = response.read()
#6840777
Lesenswert?

Heiner schrieb:
> Richtig. Lustig ist, dass man sogar etwas völlig sinnfreies als user
> agent mitschicken kann und dann trotzdem die gewünschte Antwort bekommt.

Jein. Nicht alles. Der original User-Agent der Urllib wird vom Server 
aktiv geblockt.
1
    headers={
2
        'User-Agent': 'Python-urllib/2.7'
3
    }
4
-->HTTPError: HTTP Error 403: Forbidden

Eine Epsilon Änderung dagegen bewirkt schon, dass die Seite ausgeliefert 
wird:
1
    headers={
2
        'User-Agent': 'Python-urllob/2.7'
3
    }
4
-->geht durch

Das sagt uns eigentlich, dass der Webseitenbetreiber eventuell nicht 
gescraped werden möchte. Die Höflichkeit gebietet es dann, vor dem 
Abrufen größerer Datenmengen einmal freundlich beim Admin anzufragen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren