Fehler im Script?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Marcellus
User
Beiträge: 18
Registriert: Mittwoch 30. Dezember 2015, 14:45

Guten Morgen,

ich bin Python Anwender und mir hat vor längerer Zeit ein Bekannter ein kleines Skript geschrieben mit dem ich bei google crawlen kann. leider funktioniert es aus irgendeinem Grund nicht mehr und ich weiss nicht mehr weiter- Kann mir jemand mir eventuell weiterhelfen bzw. weiss wer was ich machen muss damit es wieder läuft?

Kurz zur Beschreibung:

ich gehe auf cmd und tippe hier die exe file meines crwalers ein + die nötigen Angaben damit das Script google seite durchsucht und mir die Daten in einer xls datai ausspuckt. Hier ein Beispeil:

Usage: crawler.exe google_qury [-f file] [-l limit] [-a max_alexa_rank]
Example: crawler.exe sonnenbrille -f general_list.xls -l 500 -a 500000

Normalerweise müsste mir das Script jetzt mindestens 500 URL mit den oben stehenden Parametern Sonnenbrille und das google rank bis 500000 ausspucken, was er früher auch gemacht hat. nun aber kommt folgende Fehlermeldung:


http://www.bilder-upload.eu/show.php?fi ... 549331.jpg

Ich bin für jeden Tipp und jede Hilfe dankbar. Euch einen guten Rutsch ins neue Jahr!

Lieben Gruß
Marcel
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@Marcellus
So ganz ohne Quelltext ist es kaum möglich, der Ursache auf den Grund zu gehen. Ein `HTTP 404` Error weist erstmal darauf hin, dass eine Seite, die angefordert wurde, nicht existiert.
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Marcellus
User
Beiträge: 18
Registriert: Mittwoch 30. Dezember 2015, 14:45

hallo mutetella,

danke für deine Nachricht. Meinst Du meinen Link oder was genau?
Marcellus
User
Beiträge: 18
Registriert: Mittwoch 30. Dezember 2015, 14:45

Ich glaube jetzt müsste was zu sehen sein :)

Bild
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@Marcellus
Nein, ich meinte die Fehlermeldung. Die besagt eben erstmal, dass ein `HTTP 404` Error verursacht wurde. Warum dieser Fehler auftaucht, kann man eben so ganz ohne Quelltext nicht sagen. Da wirst Du Dich wohl mit Deinem Bekannten kurzschließen müssen.
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Marcellus
User
Beiträge: 18
Registriert: Mittwoch 30. Dezember 2015, 14:45

Leider gibt es den Bekannten nicht mehr :( wie komme ich denn an den quelltext ran?dann koennte ich den doch auslesen und hier rein kopieren oder? Viele Grüße Marcel
BlackJack

@Marcellus: Als erstes könntest Du mal versuchen ob das Programm funktioniert wenn Du die Limit-Option richtig angibst, also ``-l50`` statt ``l-50``.

Ansonsten ist die Frage ob der Quelltext irgendwie aus der EXE zu holen ist. Kann gut sein dass der Originalquelltext da nicht dabei ist.

An so etwas sollte man beizeiten denken, insbesondere bei Software die Webseiten „scraped“, weil das ja nicht wirklich ungewöhnlich ist das sich bei Webseiten mal etwas ändert und die Software dann nachziehen muss um weiter zu funktionieren.
Marcellus
User
Beiträge: 18
Registriert: Mittwoch 30. Dezember 2015, 14:45

Hallo BlackJack,

tatsächlich hab ich mich hier vertippt, aber auch mit -l 50 geht es nicht.

Wie kann ich denn herausfinden ob der Quellcode in der Exe dabei ist?

Ist es schwierig selbst solch ein Script zu erstellen?

hier noch mal den ganzen Ausgabe text:

Bild
Sirius3
User
Beiträge: 18260
Registriert: Sonntag 21. Oktober 2012, 17:20

@Marcellus: die exe-Datei ist wahrscheinlich eine zip-Datei. Wenn Du sie in .zip umbenennst, müßtest Du sie entpacken können.
Marcellus
User
Beiträge: 18
Registriert: Mittwoch 30. Dezember 2015, 14:45

ja es ist eine zip datei und die beinhaltet nur eine exe. genau!
BlackJack

@Marcellus: Die EXE-Datei selbst ist wahrscheinlich ebenfalls nur ein kleiner EXE-„stub“ an dem ein Archiv hängt wo dann die Programme und Daten drin sind die benötigt werden um das Programm auszuführen. Benenne mal die EXE um oder versuch die direkt mit so etwas wie 7zip zu entpacken.
Marcellus
User
Beiträge: 18
Registriert: Mittwoch 30. Dezember 2015, 14:45

@BlackJack: ich erhalte die Meldung: crawler.exe kann nicht als Zip Archiv entpackt werden
Benutzeravatar
pixewakb
User
Beiträge: 1413
Registriert: Sonntag 24. April 2011, 19:43

Wenn Du es neu schreiben müsstet: das Modul requests für den Abruf der Seiten, das Modul beautifulsoup zum Parsen der Website. Fürs Speichern nach xls gibt es eigene Module. Ich verwende ein Modul, um mir ods-Dateien schreiben zu lassen, wenn ich das denn mal brauche. BTW: CSV ist m. E. auch interessant, weil ich das Dateiformat leichter in Python weiterverarbeiten kann.

http://docs.python-requests.org/en/latest/

http://www.crummy.com/software/BeautifulSoup/

Kompliziert ist es m. E. nicht, sich einen eigenen Crawler zusammenzubauen.
Marcellus
User
Beiträge: 18
Registriert: Mittwoch 30. Dezember 2015, 14:45

@pixewab: vielen Dank dafür. Heißt wohl mir bleibt nichts anderes übrig als selber was zu basteln? Dann hab ich ja jetzt ein neues Ziel für 2016 :)

Vielen Dank und guten Rutsch
marcel
nezzcarth
User
Beiträge: 1752
Registriert: Samstag 16. April 2011, 12:47

@Marcellus: binäre Dateien sind auch unter Windows nicht der Standard für Python-Skripte. Daher wäre vielleicht interessant herauszufinden, wie genau der Bekannte die PE-Datei erstellt hat um ggf. Rückschlüsse zu ziehen, ob man irgendwie an den Sourcecode kommen kann. Früher hat man unter Windows z.B. PEiD verwendet; weiß nicht, ob es da inzwischen was anderes/besser gibt.
Benutzeravatar
pixewakb
User
Beiträge: 1413
Registriert: Sonntag 24. April 2011, 19:43

Ich sage es mal so: Wahrscheinlich würde ich es neu programmieren, weil ich den Aufwand für gering halte.

Schau mal hier zu einem alternativen Zugang:

https://de.wikipedia.org/wiki/Decompiler

und:

Google Suche nach "decompiler exe python"

U. a. findet sich diese Diskussion von 2011 (!):

http://stackoverflow.com/questions/6287 ... -by-py2exe

Du musst wissen, ob sich der Aufwand lohnt. Ich habe mit so etwas keinerlei Erfahrung. Ich kann dir nicht sagen, ob es klappt.
Marcellus
User
Beiträge: 18
Registriert: Mittwoch 30. Dezember 2015, 14:45

vielen Dank. ich denke das eine neuprogrammierung wohl wirklich mehr sinn macht.

ich werde mir die module requests und beautifulsoup anschauen. gibt es für das was ich vorhabe irgendein "Gerüst" oder muss ich hier von null beginnen? danke für die Hilfe!
Benutzeravatar
pixewakb
User
Beiträge: 1413
Registriert: Sonntag 24. April 2011, 19:43

Schau einmal, ob Du damit etwas anfangen kannst.

Code: Alles auswählen

from bs4 import BeautifulSoup
import requests

url = "http://www.heise.de/"

webpage = requests.get(url).text

soup = BeautifulSoup(webpage, "html.parser")
 
results = soup.find_all("h2")
 
for result in results:
 
    print(result.text.strip(" "))
Du wirst Dich mit HTML auf der Seite befassen müssen und dann mit den Suchmöglichkeiten. Ich habe hier nach den h2-Tags (Überschriften) gesucht. Wahrscheinlich werden bei Dir die div-Boxen, in denen Ergebnisse stehen interessanter sein. Dann musst Du die wieder weiter zerlegen, um an den Text in der Box zu kommen, der normalerweise unterteilt ist...
Marcellus
User
Beiträge: 18
Registriert: Mittwoch 30. Dezember 2015, 14:45

ok, requests und beautifulsoup habe ich erfolgreich installiert und werde nun mit Deinem "Gerüst" weitermachen.

Die xls oder cvs datei die mir das script früher ausgespuckt hat, gab mir folgende Daten aus:

Nr, Content, URL, CMS System der Seite (z.b. Magento), Ranking (googlerank)
Benutzeravatar
pixewakb
User
Beiträge: 1413
Registriert: Sonntag 24. April 2011, 19:43

Nr, Content, URL, CMS System der Seite (z.b. Magento), Ranking (googlerank)
Du bildest Listen von Listen und packst da die Daten rein.
Um das Prinzip zu verdeutlichen:

Code: Alles auswählen

import pprint

ergebnisse = []

results = ["http://www.ard.de", "http://www.zdf.de",
           "http://www.rtl.de", "http://www.disney.de"]

for i, result in enumerate(results):

    teilergebnis = []

    nr = i + 1
    content = "Text aus dem Ergebnis"
    url = result
    cms = "Brauchst Du das wirklich?"
    ranking = i
    
    teilergebnis = [nr, content, url, cms, ranking]
    
    ergebnisse.append(teilergebnis)


pprint.pprint(ergebnisse)
Das CMS bekommst Du m. E. nur, wenn Du die Seite dann gezielt darauf auswertest. Der Google-Rank könnte (?) der Platz in der Trefferliste sein, das ist dann im Prinzip der Platz in der Ergebnisliste. content dürfte die Beschreibung der Seite von Google sein usw.
Antworten