84 Stimmen

Webseiteninhalte mit Python abrufen?

Ich benutze Python 3.1, falls das hilft.

Wie auch immer, ich versuche, den Inhalt dieser Webseite zu bekommen. Ich habe ein wenig gegoogelt und verschiedene Dinge ausprobiert, aber sie haben nicht funktioniert. Ich vermute, dass dies eine einfache Aufgabe sein sollte, aber... ich bekomme es nicht. :/.

Ergebnisse von urllib, urllib2:

>>> import urllib2
Traceback (most recent call last):
  File "", line 1, in 
    import urllib2
ImportError: No module named urllib2
>>> import urllib
>>> urllib.urlopen("http://www.python.org")
Traceback (most recent call last):
  File "", line 1, in 
    urllib.urlopen("http://www.python.org")
AttributeError: 'module' object has no attribute 'urlopen'
>>> 

Python 3 Lösung

Danke, Jason. :D.

import urllib.request
page = urllib.request.urlopen('http://services.runescape.com/m=hiscore/ranking?table=0&category_type=0&time_filter=0&date=1519066080774&user=zezima')
print(page.read())

6 Stimmen

Duplikat: Suchen Sie nach urlib2 oder Webseite abrufen [Python] in SO und Sie werden 100 ähnliche Fragen finden.

0 Stimmen

Habe urllib2 und urllib ausprobiert, aber keines hat funktioniert. (Erster Beitrag bearbeitet)

2 Stimmen

Er verwendet Python 3, also sind die APIs anders. Ich habe bestimmt etwas Neues gelernt, indem ich diese Antwort recherchiert habe.

61voto

Jonathan Hartley Punkte 14645

Wenn Sie an einem Projekt arbeiten, das Pakete von PyPI installiert, dann ist die beste und häufigste Bibliothek, um dies zu tun, requests. Es bietet viele praktische, aber leistungsstarke Funktionen. Verwenden Sie es so:

import requests
response = requests.get('http://hiscore.runescape.com/index_lite.ws?player=zezima')
print (response.status_code)
print (response.content)

Aber wenn Ihr Projekt seine eigenen Abhängigkeiten nicht installiert, d.h. auf in der Standardbibliothek enthaltene Funktionen beschränkt ist, dann sollten Sie eine der anderen Antworten konsultieren.

35voto

Jason R. Coombs Punkte 38667

Weil du Python 3.1 verwendest, musst du die neuen Python 3.1 APIs verwenden.

Versuche:

urllib.request.urlopen('http://www.python.org/')

Alternativ scheint es, dass du von Python 2-Beispielen ausgehst. Schreibe es in Python 2 und verwende dann das 2to3-Tool, um es zu konvertieren. Auf Windows befindet sich 2to3.py in \python31\tools\scripts. Kann mir jemand sagen, wo sich 2to3.py auf anderen Plattformen befindet?

Bearbeiten

Heutzutage schreibe ich Python 2- und 3-kompatiblen Code, indem ich six verwende.

from six.moves import urllib
urllib.request.urlopen('http://www.python.org')

Angenommen, du hast six installiert, läuft das sowohl auf Python 2 als auch auf Python 3.

0 Stimmen

Ich bin auf Windows. Auf jeden Fall, danke, es hat gut funktioniert. (Die von dir verlinkte Seite sieht sehr hilfreich aus, übrigens. Danke dafür, besonders.)

1 Stimmen

Auf Ubuntu befand es sich im Pfad, daher musste ich nur das 2to3 -Befehl ausführen. Whereis sagt, dass es sich in /usr/bin/2to3 befindet.

2 Stimmen

Verdammt, Python 3 fängt langsam an, ein Problem zu werden: Man kann nicht einfach die erste Stack Overflow-Antwort kopieren und erwarten, dass sie noch funktioniert !

9voto

Zuko Punkte 2534

Wenn du mich fragst, probiere mal das aus

import urllib2
resp = urllib2.urlopen('http://hiscore.runescape.com/index_lite.ws?player=zezima')

und lies es auf normale Weise

page = resp.read()

Viel Glück trotzdem

5voto

Joe Koberg Punkte 23526

Mechanize ist ein tolles Paket zum "wie ein Browser agieren", wenn du Cookie-Status, etc. handhaben möchtest.

http://wwwsearch.sourceforge.net/mechanize/

2voto

JasDev Punkte 716

Sie können urlib2 verwenden und das HTML selbst analysieren.

Oder versuchen Sie Beautiful Soup, um einen Teil der Analyse für Sie zu erledigen.

0 Stimmen

Habe urllib2 und urllib ausprobiert, aber keines funktionierte. (Erster Beitrag bearbeitet)

0 Stimmen

Andrew, andere können Ihnen besser helfen, wenn Sie ausführlich beschreiben, was Sie versucht haben und welche Fehlermeldungen / unerwarteten Verhaltensweisen aufgetreten sind.

0 Stimmen

Ich habe es in meinen ursprünglichen Beitrag eingefügt, weil ich keinen riesigen Kommentar haben wollte. :P.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X