Hallo!
Könnte mir jemand bei folgender Aufgabe weiterhelfen:
Rufen Sie die Online-Version des Shanghai Rankings, der Top 500 Universitaten auf. Machen Sie sich
mit der Struktur der Webseite vertraut. Crawlen Sie die Webseite und extrahieren Sie Daten fur alle
Jahre, von 2003 bis 2014. Geben Sie an, welche Entscheidungen Sie jeweils bezuglich der drei Schritte
des Webcrawlings (seed,crawl frontier und policy ) getroen haben und begrunden Sie diese
Vielen Dank
Webcrawling
Na klar, dass Vorgehen ist eigentlich ganz einfach, du musst nur folgendes tun:
Rufe die Online-Version des Shanghai Rankings, der Top 500 Universitaten auf. Mache dich
mit der Struktur der Webseite vertraut. Crawle die Webseite und extrahiere Daten fur alle
Jahre, von 2003 bis 2014. Gib an, welche Entscheidungen du jeweils bezuglich der drei Schritte
des Webcrawlings (seed,crawl frontier und policy ) getroen hast und begrunden diese.
Hier wird sicher keiner deine Aufgaben für dich erledigen. Wie lauten denn deine konkreten Fragen zum Problem? Wie sieht dein bisheriger Code aus? Was für Gedanken hast du dir schon gemacht und was hast du ausprobiert und das Problem zu lösen?
Rufe die Online-Version des Shanghai Rankings, der Top 500 Universitaten auf. Mache dich
mit der Struktur der Webseite vertraut. Crawle die Webseite und extrahiere Daten fur alle
Jahre, von 2003 bis 2014. Gib an, welche Entscheidungen du jeweils bezuglich der drei Schritte
des Webcrawlings (seed,crawl frontier und policy ) getroen hast und begrunden diese.
Hier wird sicher keiner deine Aufgaben für dich erledigen. Wie lauten denn deine konkreten Fragen zum Problem? Wie sieht dein bisheriger Code aus? Was für Gedanken hast du dir schon gemacht und was hast du ausprobiert und das Problem zu lösen?
Das Leben ist wie ein Tennisball.
Das Problem ist dass ich die URL nicht öffnen kann mit:
kommt folgender Output:
Code: Alles auswählen
import urllib2
response = urllib2.urlopen('http://shanghairanking.com/de')
html = response.read()
Code: Alles auswählen
Traceback (most recent call last):
File "<ipython-input-14-ee84a4abc301>", line 2, in <module>
response = urllib2.urlopen(seed)
File "C:\Users\User\Anaconda\lib\urllib2.py", line 127, in urlopen
return _opener.open(url, data, timeout)
File "C:\Users\User\Anaconda\lib\urllib2.py", line 404, in open
response = self._open(req, data)
File "C:\Users\User\Anaconda\lib\urllib2.py", line 422, in _open
'_open', req)
File "C:\Users\User\Anaconda\lib\urllib2.py", line 382, in _call_chain
result = func(*args)
File "C:\Users\User\Anaconda\lib\urllib2.py", line 1214, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "C:\Users\User\Anaconda\lib\urllib2.py", line 1184, in do_open
raise URLError(err)
URLError: <urlopen error [Errno 11004] getaddrinfo failed>
@Padidem: Das glaube ich kaum denn im Quelltext steht eine literale Zeichenkette und im Traceback steht der Name `seed`. Bitte keine Code/Traceback-Kombinationen die gar nicht zusammengehören.
Du könntest die URL mal im Browser ausprobieren. Zumindest bei mir funktioniert die auch dort nicht.
Du könntest die URL mal im Browser ausprobieren. Zumindest bei mir funktioniert die auch dort nicht.
- pillmuncher
- User
- Beiträge: 1484
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
Dafür funktioniert bei mir im Browser http://www.shanghairanking.com.
In specifications, Murphy's Law supersedes Ohm's.
Jup, die funktioniert bei mir auch. Und auch die URL vom Link zur deutschen Seite die auf dieser Webseite zu finden ist.
Edit: @Padidem: Ich würde übrigens keine der beiden Seiten als Ausgangspunkt verwenden. Es gibt da eine Alternative die a) ”maschinenfreundlicher” ist und b) deutlich robuster ist was Änderungen am Websitedesign angeht (ein Grund für a)).
Edit: @Padidem: Ich würde übrigens keine der beiden Seiten als Ausgangspunkt verwenden. Es gibt da eine Alternative die a) ”maschinenfreundlicher” ist und b) deutlich robuster ist was Änderungen am Websitedesign angeht (ein Grund für a)).
Ich habe mir gedacht die Aufgabe mit der pandas.read.html Funktion zu erledigen und die Tabellen einzeln auszulesen, aber wie verbinde ich das dann mit dem seed, crawl frontier und policy?
Also für 2011 z.B. :
Also für 2011 z.B. :
Code: Alles auswählen
import urllib2
import pandas as pd
response = urllib2.urlopen('http://www.shanghairanking.com/ARWU2011.html')
html = response.read()
df = pd.read_html(html)
@Padidem: Bei `seed` kann ich ja noch raten was das sein soll, aber „crawl frontier” und „policy”!? Ich denke mal Du sollst die Links zu den Seiten mit den Jahren nicht hart im Programm vorgeben sondern aus einer anderen Seite extrahieren. Da bräuchte man dann einen HTML-Parser der nicht nur mit Tabellen funktioniert.
@Padidem: Die Frage ist jetzt nicht ernst gemeint oder? In einem *beliebigen* Datenformat? In dem man die entsprechenden Module verwendet für das *beliebige* Datenformat, und eventuell noch etwas (oder etwas mehr) eigenen Code ergänzt. Welche Module und welchen und wieviel eigener Code hängt davon ab welches *konkrete* Datenformat man in eine Datei schreiben möchte.
wenn ich meinen Datenframe über csv speichern will:
Kommt die Meldung:
AttributeError: 'list' object has no attribute 'to_csv'
Wie kann ich das beheben?
Code: Alles auswählen
df.to_csv(pandas_03, sep='\t')
AttributeError: 'list' object has no attribute 'to_csv'
Wie kann ich das beheben?