staging.inyokaproject.org

Web Scraping

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

yungmagnum

Anmeldungsdatum:
13. Mai 2019

Beiträge: 11

Hallo liebe Ubuntu-Gemeinde, in meinem Informatikstudium muss ich mich zum ersten Mal mit der Linux-Shell auseinandersetzen. Als Aufgabe hat uns der Prof gebeten den heise-Newsticker (URL: https://www.heise.de/newsticker/archiv/2009/12) mithilfe eines oder mehreren Kommandos, nach der Uhrzeit im Dezember 2009 zu filtern, zu der am meisten Artikel hochgeladen wurden. Als Ausgabe soll neben der Uhrzeit auch noch die Anzahl der Artikel ausgegeben werden. Ich und mehrere Kommilitonen stehen weitestgehend ratlos vor dieser Aufgabe, da wir uns allesamt davor nicht wirklich mit Linux beschäftigt haben. Über Anregungen, Hilfe, Tipps, Lösungsvorschläge usw. wäre ich sehr dankbar! Vielen Dank. P.S https://medium.com/@LiliSousa/web-scraping-with-bash-690e4ee7f98d Dieser Artikel hat mich ein wenig weiter gebracht.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

Das hat ja mit Linux nur wenig zu tun.

Welche Linuxshell benutzt Ihr denn, wahrscheinlich bash? Mit bash unter Solaris oder BSD sähe das ganze also wohl weitgehend ähnlich aus, oder?

Wie würdest Du die Aufgabe denn mit einem GUI lösen, von Hand, wenn Zeit keine Rolle spielen würde? Wie findest Du alle Artikel vom Dezember 2009 und wie darin die Uhrzeit?

Kannst Du den Lösungsweg grob skizzieren?

Kannst Du von da zu Pseudocode weitergehen?

Ist die häufigste Uhrzeit auf Basis der möglichen Präzision zu ermitteln (auf die Stunde, Minute oder Sekunde genau)?

Nützliche Kommandos zum Seitenfinden hast Du ja schon gefunden (curl, wget), zum Filtern der Uhrzeit: grep, zum Zählen: wc.

Sicher werden Dich einige belehren, dass Du HTML-Seiten nicht mit grep, sondern xmlstarlet o.dgl. analysieren sollst, aber vom Kontext Linux-Shell-Anfänger würde ich zu grep raten.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

Oh, ich sehe, das ist alles auf einer Seite, wie praktisch!

HTML-Quelltext anschauen, Linux-Piping benutzen (würde man unter MacOSX oder anderen Systemen genauso machen), ein paar Tools aus den Unix-Coreutils benutzen. Für einen geübten User eine Sache von einer Minute. Ergebnis, die top 3:

1
2
3
      7                     14:55
      8                     12:20
     10                     09:30

Das sollte Dir weiterhelfen:

1
info coreutils

yungmagnum

(Themenstarter)

Anmeldungsdatum:
13. Mai 2019

Beiträge: 11

Ok wow, vielen Dank schon Mal. Das übersteigt aber bei weitem schon mein Verständnis der bash-Shell. Wir haben uns gerade ein mal mit den Basic Kommandos in der Vorlesung auseinandergesetzt. Könntest du vielleicht ein wenig erklären, wie du vorgegangen bist. Also den groben Ablauf, damit ich verstehe wie man das Ganze angeht. Beste Grüße!

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

Ich habe Deine Frage aufmerksam gelesen und dabei das Schlüsselwort Informatikstudium ausgemacht. Das heißt für mich, dass Du Algorithmen zu entwickeln lernst, lernen willst, vielleicht schon ein wenig gelernt hast.

Du hast keine der 4 Rückfragen von mir beantwortet und stellst eine neue,

Könntest du vielleicht ein wenig erklären, wie du vorgegangen bist.

Du sollst ja nicht lernen Schritte nachzumachen, sondern den Weg zu finden.

Ich habe diese Heiseseite für Dezember geöffnet und gesehen, dass da der ganze Dezember schon fertig vor einem liegt. Mit wget habe ich die Webseite runtergeladen und hatte dann die Datei "12" auf der Festplatte.

1
cat 12

hat den Quelltext ausgegeben, aber das Geraffel hinter dem letzten, interessanten Eintrag war noch so viel Zeuch, das es unbequem war, so weiter zu suchen.

Also habe ich im Browser "Seitenquelltext anzeigen" angeklickt mit einem ähnlichen Resultat für den Beginn des Dokuments. Die erste, interesssante Meldung ist "Saturn ...". Also habe ich mit ctrl-F nach Saturn im Seitenquelltext gesucht und dann den interessierenden HTML-Code für eine Zeile gesehen.

Dann habe ich grep, sort und uniq mehrfach in Serie angewendet, um nur die Zeiten auszufiltern, zu sortieren, zu zählen und das Ergebnis nach Häufigkeit zu sortieren.

Die Kommandos grep, sort und uniq kann man mit

1
2
KOMMANDO --help # knapp 
man KOMMANDO # ausführlich

studieren. Da muss man natürlich am Anfang rumexperimentieren, um die Optionen zu verstehen und zu erkennen, welche weiteren Möglichkeiten sich damit auftun. Das lernst Du natürlich nicht, wenn Du die Lösung abschreibst.

Ebenso die Übung im Umgang mit man/--help/info usw.

yungmagnum

(Themenstarter)

Anmeldungsdatum:
13. Mai 2019

Beiträge: 11

Tut mir leid, aber ich habe deine Fragen als rhetorisch aufgefasst, um mir sozusagen eine kleine Hilfestellung zu geben. Sodass ich erst mal eine Skizze anfertigen soll, von dort dann zum Pseudocode und dann zur bash usw. Ich hätte nicht erwartet, dass du wirklich eine Antwort darauf haben möchtest. Naja Ich habe ja nicht nach der perfekten Musterlösung gefragt, sondern nur nach dem groben Schema, wie man vorzugehen hat, weil wir Aufgaben wie diese noch nicht behandelt haben und wir uns das nebenher neben des Studiums mehr oder weniger autodidaktisch aneignen sollen. Aber ein grobes Schema hast du mir ja geliefert, mehr wollte ich nicht hören. Vielen Dank dafür! ☺

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

yungmagnum schrieb:

Ich habe ja nicht nach der perfekten Musterlösung gefragt, sondern nur nach dem groben Schema, wie man vorzugehen hat,

Genau das zu entwickeln ist ja Deine Aufgabe. Das unterscheidet einen Informatiker von einem Programmierer: wir bekommen Problemstellungen und finden Lösungen.

weil wir Aufgaben wie diese noch nicht behandelt haben und wir uns das nebenher neben des Studiums mehr oder weniger autodidaktisch aneignen sollen.

"Autodidaktisch" klingt so, als ob das im Studium unangemessen wäre. Aber ein wesentlicher Punkt des Studiums ist ja genau dieses selbständige Finden von Lösungen zu lernen.

Antworten |