BeautifulSoup installieren

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.
Antworten
Hope
User
Beiträge: 11
Registriert: Montag 16. November 2020, 19:38

Hallo allerseits,

ich schreibe an meiner MA und muss zum ersten Mal programmieren. Also bitte habt Nachsicht :)

In meiner MA geht es um Kreditrisikomessung im WWW. Dh ich programmiere und crawle durch die Seiten und muss sie letztlich analysieren mittels Sentiment Analysis.
Mein Problem: Ich arbeite mit Python und einem Editor (mittlerweile habe ich einige Editoren ausprobiert, da nichts funktioniert hat, zb PyCharm, Sublime Text, Anaconda).

Ich habe im Terminal alles installiert: BeautifulSoup, Pandas, RoboBrowser., requests.

Im Editor jedoch wirft der mir nicht das HTML Dokument aus, wenn ich BS importiere, sondern gibt mir jedes mal eine Fehlermeldung.

from bs4 import BeautifulSoup
import requests

Output: traceback (most recent call last): File ..... , line 1, in <module> import requests
ImportError: No module named requests
[finished in 0.5s with exit code 1]
[shell_cmd: python -u" Ordername..."]
[dir ....]
[path ..... ]

Ich danke im Voraus
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Du mußt auch noch requests installieren.
Hope
User
Beiträge: 11
Registriert: Montag 16. November 2020, 19:38

Danke für die Rückmeldung. Ich habe "pip Install requests" im Terminal schon installiert. Jetzt habe ich nochmal versucht "from bs4 Import BeautifulSoup" im Shell zu rennen. Ich bekomme wieder eine Fehlermeldung:


Warning (from warnings module):
File "/Users/Nadine/Desktop/Masterarbeit_DB/html,python,r_lernen/BS.py", line 11
soup = BeautifulSoup(resp.content)
GuessedAtParserWarning: No parser was explicitly specified, so I'm using the best available HTML parser for this system ("lxml"). This usually isn't a problem, but if you run this code on another system, or in a different virtual environment, it may use a different parser and behave differently.

The code that caused this warning is on line 11 of the file /Users/Nadine/Desktop/Masterarbeit_DB/html,python,r_lernen/BS.py. To get rid of this warning, pass the additional argument 'features="lxml"' to the BeautifulSoup constructor.

Traceback (most recent call last):
File "/Users/Nadine/Desktop/Masterarbeit_DB/html,python,r_lernen/BS.py", line 51, in <module>
from robobrowser import RoboBrowser
File "/Users/Nadine/opt/anaconda3/lib/python3.8/site-packages/robobrowser/__init__.py", line 3, in <module>
from .browser import RoboBrowser
File "/Users/Nadine/opt/anaconda3/lib/python3.8/site-packages/robobrowser/browser.py", line 8, in <module>
from werkzeug import cached_property
ImportError: cannot import name 'cached_property' from 'werkzeug' (/Users/Nadine/opt/anaconda3/lib/python3.8/site-packages/werkzeug/__init__.py)

Ich weiss echt nicht, was ich machen soll.
lxml habe ich auch installiert. Ich nutze einen Mac.
Benutzeravatar
__blackjack__
User
Beiträge: 14054
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@n.soueid@gmx.de: Offenbar braucht `robobrowser` das `werkzeug`-Package und es ist nicht ordentlich als Abhängigkeit definiert gewesen. Müsste man also noch nachinstallieren.

Die Warnung könntest Du im Code beheben. Bei `BeautifulSoup` fehlt neben dem HTML-Quelltext noch das zweite Argument.

Gewöhne Dir am besten auch gar nicht erst an kryptische Abkürzungen als Namen zu verwenden. Wenn man `response` meint, sollte man nicht nur `resp` schreiben.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Hope
User
Beiträge: 11
Registriert: Montag 16. November 2020, 19:38

Vielen Dank für die Rückmeldung. BeautifulSoup hat funktioniert. Was meinst du mit dem 2. Argument?

Was heißt ordentlich installieren ? Ich habe robobrowser und Werkzeug nacheinander installiert. Oder soll man da auf Weiteres achten?
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

@n.soueid@gmx.de: Wenn du eine Instanz von BeautifulSoup anlegst, übergibst du bisher nur ein Argument - nämlich resp.content. BeautifulSoup kennt aber noch weiter Argumente.
Benutzeravatar
__blackjack__
User
Beiträge: 14054
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@n.soueid@gmx.de: Wenn `robobrowser` `werkzeug` als Abhängigkeit hat, dann sollte das eigentlich automatisch mit installiert werden. Es sei denn die Autoren von `robobrowser` haben die Abhängigkeit nicht wie vorgesehen angegeben.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Hope
User
Beiträge: 11
Registriert: Montag 16. November 2020, 19:38

Hallo, ich danke für die Antworten. Ich versuche seit 2 Tagen das Problem zu lösen, es funktioniert leider nicht.

Jetzt habe ich nochmal diese Codes im Terminal installiert:
pip Install werkzeug==0.16.01
pip install RoboBrowser
pip install werkzeug Robobrowser

Alles funktioniert im Terminal, aber nicht in der Shell.
In der Shell habe ich folgende Codes:
from werkzeug.utils import cached_property (funktioniert)
from werkzeug import RoboBrowser (funktioniert nicht)
from robobrowser import RoboBrowser (funktioniert nicht)

Habe ich was übersehen?
Dankeschön
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Was ist denn bei Dir das Terminal und was ist die Shell?
Benutzeravatar
__blackjack__
User
Beiträge: 14054
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Und warum sollte das `werkzeug`-Package `RoboBrowser` zur Verfügung stellen?
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
__blackjack__
User
Beiträge: 14054
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ich habe das jetzt mal nachvollzogen: RoboBrowser hat die Abhängigkeiten ordentlich deklariert und zieht auch die Installation von BeautifulSoup4, requests, und Werkzeug nach sich. Man braucht also nur RoboBrowser installieren und bekommt alles andere auch schon geliefert:

Code: Alles auswählen

(rb) bj@s8n:~/tmp/forum/rb$ pip install RoboBrowser
[…]
Installing collected packages: Werkzeug, soupsieve, beautifulsoup4, urllib3, certifi, chardet, idna, requests, six, RoboBrowser
  Running setup.py install for RoboBrowser ... done
Successfully installed RoboBrowser-0.5.3 Werkzeug-1.0.1 beautifulsoup4-4.9.3 certifi-2020.11.8 chardet-3.0.4 idna-2.10 requests-2.25.0 six-1.15.0 soupsieve-2.0.1 urllib3-1.26.2
Beim Importieren von `RoboBrowser` bekomme ich dann auch die Ausnahme das `cached_property` von `werkzeug` nicht importiert werden kann:

Code: Alles auswählen

(rb) bj@s8n:~/tmp/forum/rb$ python -c 'from robobrowser import RoboBrowser'Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/home/bj/tmp/forum/rb/lib/python3.6/site-packages/robobrowser/__init__.py", line 3, in <module>
    from .browser import RoboBrowser
  File "/home/bj/tmp/forum/rb/lib/python3.6/site-packages/robobrowser/browser.py", line 8, in <module>
    from werkzeug import cached_property
ImportError: cannot import name 'cached_property'
Also "robobrowser ImportError: cannot import name 'cached_property'" in eine Suchmaschine füttern und die ersten Treffer durchsehen, dann kommt man zu einem Bugtracker-Issue bei RoboBrowser: RoboBrowser is broken with werkzeug upgrade. Bug ist noch offen aber in den Kommentaren gibt es eine einfache Übergangslösung.

Alternativ könnte man bei Werkzeug schauen wann diese Änderung gemacht wurde und eine entsprechend ältere Werkzeug-Version installieren.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Hope
User
Beiträge: 11
Registriert: Montag 16. November 2020, 19:38

Hallo, Terminal ist bei mir, wie beim Windows, der command line. Shell ist bei mir Python command.

Ich habe es nochmal versucht. Danke @_blackjack_ für den Hinweis. Ich habe zuerst RoboBrowser in der Shell angegeben und alles weitere hat funktioniert.
Hope
User
Beiträge: 11
Registriert: Montag 16. November 2020, 19:38

Hallo allerseits, leider kann ich kein neues Thema eröffnen, daher schreibe ich hier:

Ich muss einen Ordner crawlen, der eine .xlsx Datei enthält mit Scrapy. Alle Codes, die ich bisher ausprobiert habe, funktionieren nicht.

import scrapy

egal was ich finde, ist immer nur mit URL

class BlogSpider(scrapy.Spider):
name = 'blogspider'
start_urls = ['https://www.zyte.com/blog/']

Mein Betreuer hat mir mongoDB gestartet, mit cd auf den Ordner zugegriffen und mit dem command "scrapy crawl my_spider" sollte eig alles funktionieren, tut es aber nicht, weil die Excel-Datei im Ordner angeblich nicht funktioniert. Ich habe daraufhin "pip Install xlrd" installiert, es funktioniert dennoch nicht.

Hat vllt jemand eine Idee was ich machen kann? oder sollte ich vllt einen neuen Code wie da oben starten mit class?
Ich danke vielmals

lg Hope
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Einen Ordner auf deiner Platte? Der hat doch nichts mit "crawlen" zu tun. Man "crawlt" Internetseiten. Für Dateien auf dem lokalen Rechner braucht man das nicht.
Den Rest deiner Frage verstehe ich nicht. Was hat mongoDB damit zu tun? Und was scrapy?
Bitte versuch einmal dein Problem zu beschreiben - ohne möglicherweise falsche Bibliotheken.
Hope
User
Beiträge: 11
Registriert: Montag 16. November 2020, 19:38

Ich danke erstmal für die Antwort. Ich versuche es zu erklären. Ich soll einen vorinstallierten Ordner, der aus Python Skripten und einer excel Datei besteht, crawlen. Alles soll ich mongoDB abgespeichert werden. Ich geh wie folgt vor: mongoDB starten und beenden, cd in den Ordner und dann scrapy crawl my_spider. Das Tool scrapy zum Crawlen soll ich benutzen. Im Terminal hat scrapy crawl my_spider nicht funktioniert, da laut Terminal er die xlsx nicht lesen kann. Auch wenn ich xlrd installiert habe.

Kann man denn aus einem Ordner mit Python Skripten und einer excel Datei crawlen?
Benutzeravatar
__blackjack__
User
Beiträge: 14054
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Hope: Nochmal: Das macht keinen Sinn was Du da beschreibst. „Crawlen“ bezeichnet den Vorgang ausgehend von einer URL Webseiten zu verarbeiten in dem man den Links auf der oder den Ausgangsseite(n) folgt und Informationen aus den Seiten gewinnt und speichert. Scrapy ist ein Werkzeug/Rahmenwerk für solche Aufgaben. Du sollst also ganz sicher nicht den Ordner mit den vorgegebenen Dateien ”crawlen”.

Du scheinst da Code vorgegeben zu haben der mit den Scrapy-Rahmenwerk arbeitet. Und dazu irgendetwas mit einer Exceldatei machen soll. Und das klappt nicht. Was immer das auch bedeuten mag. Da musst Du etwas konkreter werden. Du gibst ``scrapy crawl my_spider`` ein — und was passiert dann genau? Eine Fehlermeldung? Wie lautet die? Nicht beschreiben sondern am besten 1:1 in den Beitrag kopieren.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten