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.
Benutzeravatar
pixewakb
User
Beiträge: 1412
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: 1412
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: 1412
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.
Marcellus
User
Beiträge: 18
Registriert: Mittwoch 30. Dezember 2015, 14:45

soweit passt alles, nur erhalte ich leider die Fehlermeldung:

ImportError: No module named 'bs4'

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(" "))
	
	
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 = []
 
    Lead nr = i + 1
    content = "Fahrrad"
    url = result
    cms = "Magento, JTL, Typo3"
    ranking = i
   
    teilergebnis = [Lead nr, content, url, cms, ranking]
   
    ergebnisse.append(teilergebnis)
 
 
pprint.pprint(ergebnisse)
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Nope, das passt noch nicht. Arbeite begleitend ein Tutorial zu Python zumindest ansatzweise durch.

Folgendes Problem: Du rufst wahrscheinlich Module auf, die Du zuvor nicht installiert hast. Das vermute ich ganz massiv, deshalb die Fehlermeldungen. Das sind Grundlagen und deshalb solltest Du dich an ein Tutorial machen.

Konkret zur Lösung:
http://docs.python-requests.org/en/late ... l/#install
http://www.crummy.com/software/BeautifulSoup/#Download

Ich setze immer voraus, dass Du Windows nutzt, weil ich das auch mache. In dem Fall startest Du die MS Eingabeaufforderung (Command Prompt) und gibst folgende 2 Sachen nacheinander ein und bestätigst jede Eingabe mit Enter.

Zeile 1:
pip install requests

Das installiert Dir requests, was Du brauchst und wahrscheinlich den nächsten Fehler geworfen hätte.

Zeile 2:
pip install BeautifulSoup

Das installiert Dir das bs4-Package.

Anschließend kannst Du das Skript noch mal versuchen und die Fehlermeldungen sollten nicht mehr auftauchen. Ich merke an, dass pip nach Bestätigen von Enter erst einmal arbeitet und Dir Sachen anzeigt. Das sollte aber fehlerfrei durchlaufen...
Marcellus
User
Beiträge: 18
Registriert: Mittwoch 30. Dezember 2015, 14:45

Ok. Tutorials habe ich mir heute fast den ganzen Tag rein gezogen :)

requests zu installieren war kein Problem, bei beautifulSoup habe ich noch Schwierigkeiten.

Ich habe es nun mehrere male versucht, anscheinend mache ich da noch was falsch..

[img][IMG]http://www.bilder-upload.eu/thumb/e248d6-1451664686.png[/img][/img]


----------
installation hat jetzt funktioniert. :)
Marcellus
User
Beiträge: 18
Registriert: Mittwoch 30. Dezember 2015, 14:45

Die Installation müsste jetzt richtig sein oder?

[img][IMG]http://www.bilder-upload.eu/thumb/21a896-1451665993.png[/img][/img]
BlackJack

Unter `site-packages` eine `setup.py` auszuführen sieht schon mal ziemlich falsch aus. In die Verzeichnishierarchie von Python selbst sollte man nichts von Hand kopieren (wenn man nicht genau weiss was man da tut) oder gar Archive entpacken um dann von dort Skripte zum Installieren zu starten.

BeautifulSoup 4 braucht auch noch eine Bibliothek um letztendlich das HTML zu parsen. Da es dort verschiedene Alternativen gibt, denke ich die muss man manuell installieren weil da keine als feste Abhängigkeit definiert sein dürfte. `lxml.html` wäre beispielsweise so eine Bibliothek die `bs4` zum Parsen verwenden kann.
Marcellus
User
Beiträge: 18
Registriert: Mittwoch 30. Dezember 2015, 14:45

ich hab alles nochmal platt gemacht und python neu installiert und dann erst requests über pip installiert und dann beauftifulsoup
[img][IMG]http://www.bilder-upload.eu/thumb/1ca4f7-1451667092.png[/img][/img]
nezzcarth
User
Beiträge: 1635
Registriert: Samstag 16. April 2011, 12:47

pixewakb hat geschrieben:Ich sage es mal so: Wahrscheinlich würde ich es neu programmieren, weil ich den Aufwand für gering halte.
Google findet automatisierte Abfragen nicht so gut und lässt diese nicht so ohne weiteres über sich ergehen (s.a. https://support.google.com/webmasters/answer/66357; das dürfte trotz der Rubrik wohl für Google allgemein gelten). Abgesehen davon, dass man gegen die Nutzungsbedingungen verstößt, wird Aufgabe daher weniger trivial sein, als sie klingt.
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Ich erinnere mich, dass ich darüber mal mit BlackJack hier "gesprochen" habe. Meine Datenquellen im Netz verbieten kaum etwas bzw. Unterseiten, die ich gar nicht suche, also die mich nicht interessieren.

Konkret: http://www.google.de/robots.txt

Was kann eigentlich bei einem unrechtmäßigen Parsen solcher Seiten passieren!? Würde mich interessieren. Teilweise als Fingerübung schreibe ich schon mal Software, um Webseiten abzufragen, ohne mich vorher in Sachen robots.txt kundig zu machen.
BlackJack

@pixewakb: Einfachster Fall wäre wenn die Server versuchen solche Zugriffe zu erkennen und zu blocken. Wenn man auf der Seite ein Benutzerkonto besitzt und der Betreiber einen als Übeltäter identifizieren kann, könnte das Konto gesperrt werden. Es könnte auch zu künstlichen Hindernissen für alle Benutzer kommen um Missbrauch zu vermeiden. Oder der Dienst stellt den Betrieb ein wenn es überhand nimmt.
nezzcarth
User
Beiträge: 1635
Registriert: Samstag 16. April 2011, 12:47

BlackJack hat geschrieben:@pixewakb: Einfachster Fall wäre wenn die Server versuchen solche Zugriffe zu erkennen und zu blocken.
Im konkreten Fall -- Google -- bekommt man Captchas vorgesetzt.
Marcellus
User
Beiträge: 18
Registriert: Mittwoch 30. Dezember 2015, 14:45

requests und beautiful soup sind installiert und laufen, auch das crawlen mit "h2" gab mir die entsprechende Ausgabe.

Code: Alles auswählen

from bs4 import BeautifulSoup
import requests
 
url = "http://www.zdf.de/"
 
webpage = requests.get(url).text
 
soup = BeautifulSoup(webpage, "html.parser")
 
results = soup.find_all("h2")
 
for result in results:
 
    print(result.text.strip(" "))
	

	
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 = "Hose, blau"
    url = result
    cms = "Magento, JTL, Typo3"
    ranking = i
   
    teilergebnis = [nr, content, url, cms, ranking]
   
    ergebnisse.append(teilergebnis)
 
 
pprint.pprint(ergebnisse)

wie kann ich jetzt weitermachen? Kann mir jemand einen tip geben? Ich habe hier was sehr interessantes gefunden, bin mir aber noch viel zu unsicher es so wie er hier beschreibt anzugehen:

http://eliteinformatiker.de/2013/01/29/ ... mentieren/
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Du musst Dich mit den Grundlagen befassen, sonst wird das nichts. :evil:

Du kopierst meine Schnipsel zusammen, ohne sie sinnvoll zu verbinden.

Nur mal so am Rande: Ich sehe gerade das Problem, dass man den Google-Such-Link nicht einfach zusammenbasteln kann, d. h. Google packt da einiges rein. Ansonsten könntest Du mal grob beschreiben, was Du eigentlich brauchst.

Folgendes funktioniert bei mir im Browser:

https://www.google.de/search?q=python

https://www.google.de/search?q=python+crawler
Marcellus
User
Beiträge: 18
Registriert: Mittwoch 30. Dezember 2015, 14:45

sorry :) wollte Dich doch nicht ärgern. Die "Schnippsel" habe ich einfach nur zusammengefügt um nochmal darauf aufmerksam zu machen..

ja Grundlagen bin ich mit Tutorial videos dran.

Was ich brauche ist ein crawler der mit in einer csv datei oder xls CMS System, URL und das googlerank ausspuckt. wie gesagt, hat mir vor einigen jahren mal ein bekannter, der aber verstorben ist sowas gebastelt. und der funktioniert nicht mehr. Da ich aber hier nun nicht mehr groß weiter komme und ich Dich anscheinend auch noch verärgert habe, werde ich mich erstmal mit den Grundlagen beschäftigen und irgendwann eines Tages, vielleicht mal solch einen Crawler basteln. ich habe wirklich gedacht, das es schneller umsetzbar ist. Trotzdem vielen Dank für die hilfe bisher!
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Verärgert bin ich nicht, die Smileys sollte man nicht so ernst nehmen. Mein Eindruck ist allerdings, dass das so nichts werden kann. Mom. ich schaue mal.
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Das kann man so eigentlich kaum weitergeben, aber es ist ein Anfang und für mehr reicht die Zeit nicht. Du könntest mal schauen, ob es bei dir lauffähig ist. Was genau brauchst Du? Ich frage mal ganz doof, wie weit willst Du die Google Suche auswerten!? Du müsstest dann die Unterseiten nämlich auch noch durchsuchen.

Die Variablennamen dürften nicht akzeptabel sein, eigentlich gibt es zum Schreiben von csv-Dateien auch ein eigenes Modul...

Code: Alles auswählen

import requests
from bs4 import BeautifulSoup

suchwort = "Python crawler"

url = "https://www.google.de/search?q={}"

# URL zusammenbauen
google_url = url.format(suchwort.replace(" ", "+"))

# Seite abfragen
webpage = requests.get(google_url).text

soup = BeautifulSoup(webpage, "html.parser")

with open("webpage.txt", "w") as f:
    f.write(webpage)

"""
Text

Welcome to Python.org
https://www.python.org/ Diese Seite übersetzen
The official home of the Python Programming Language.
‎Download - ‎Python 3.4.3 - ‎Documentation - ‎Getting Started

HTML in Auswahl (scheint nicht (!) zu stimmen!!!)

<div class="rc" data-hveid="31">
<h3 class="r"><a href="[...] data-href="https://www.python.org/">Welcome to Python.org</a></h3>
<div class="s"><div><div class="f kv _SWb" style="white-space:nowrap">
<cite class="_Rm">https://www.<b>python</b>.org/</cite>
[...]
<span class="st">The official home of the <em>Python</em> Programming Language.</span>
[...]
"""

results = soup.find_all("li", attrs={"class": "g"})

ergebnisse = []

for i, result in enumerate(results):
    # print(result)

    print("Rang:", i+1)
    
    title = result.find("h3").find("a").text.replace("\n", "\t")
    print(title)

    """
    <span class="st">PyPI Version PyPI monthly downloads Wheel Status <b>Python</b> 3 Porting Status <br>
    Coverage report. Install the latest version of Scrapy. Scrapy 1.0. pip install scrapy.</br></span>
    """
    summary = result.find("span", attrs={"class": "st"}).text.replace("\n", "\t")
    print(summary)

    # input(">>>")
    ergebnisse.append([i+1, title, summary])
    
with open("ergebnisse.csv", "a") as f:
    for zeile in ergebnisse:
        f.write(";".join(map(str, zeile))+"\n")
Antworten