Forum: PC-Programmierung Python 3 URL-Request?


von Buggy (Gast)


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

von Fruchtgurke (Gast)


Lesenswert?

www vergessen?

von Sebastian D. (minimalist)


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()

von Gerd A. (gerd_a289)


Lesenswert?

Probier mal:

import requests
r = requests.get("https://lerneprogrammieren.de";)

von Heiner (Gast)


Lesenswert?

Sebastian D. schrieb:
> Nein, kein UserAgent angegeben. Viele Webserver rejecten dann.

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

von Sebastian D. (minimalist)


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.

von Buggy (Gast)


Lesenswert?

@ Sebastian

Vielen Dank für deine Zeilen und die Erklärung :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.