Installation eines Moduls Requirement already satisfied - und dennoch errors

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
Benutzeravatar
say_hello
User
Beiträge: 51
Registriert: Sonntag 14. Oktober 2012, 12:33

Moin Python-Experten,

ein kleines Skrip, das BeautifulSoup u. requests verwendet macht irgendwie Schwierigkeiten:

zunächst bekomme ich folgende Fehlermeldung:

Code: Alles auswählen

martin@linux-3645:~/dev/python> python w1.py
Traceback (most recent call last):
  File "w1.py", line 1, in <module>
    import requests
ImportError: No module named requests
Dann reagiere ich natürlich

Requests ist kein built in module, also werde ich das noch installieren

Auf OpenSuse Linux 42.3:

Code: Alles auswählen

 $ sudo pip install 
geht wenn man pip installiert hat

Alternativ geht

Code: Alles auswählen

 sudo easy_install -U requests


Nun - ich bekomme folgende Meldung, die ich etwas merkwürdig finde:

Code: Alles auswählen


martin@linux-3645:~/dev/python> sudo pip install requests
Requirement already satisfied: requests in /usr/lib/python3.4/site-packages
martin@linux-3645:~/dev/python> 
Hab ich jetzt etwas übersehen? Freue mich auf einen Tipp.

PS wenn ich den kpl. Code schicken muss - kein Problem.

vg say_hello
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich wette dein einfaches "python w1.py" laesst python2 laufen, aber wie du selbst zeigst ist requests fuer python3 installiert. Use the right force, Luke!
Benutzeravatar
say_hello
User
Beiträge: 51
Registriert: Sonntag 14. Oktober 2012, 12:33

hallo und guten Tag,

vielen Dank für den Hinweis. Ich werde mir das nacher nochmals genauer angucken.
Ich wette dein einfaches "python w1.py" laesst python2 laufen, aber wie du selbst zeigst ist requests fuer python3 installiert. Use the right force, Luke!
Ohhh - ich muss echt aufpassen - Py2 & Py3 - immer wieder komm ich in diese Falle rein.

Melde mich spaeter nochmals.


Danke schonmal jedenfalls

VG say
Benutzeravatar
say_hello
User
Beiträge: 51
Registriert: Sonntag 14. Oktober 2012, 12:33

moin _deets_

also ich hab nochmals nachgesehen - das ist der Code.

Hintergrund: will mal gucken wie gut ich mit BS4 einsteigen kann. Hab ein sehr praktisches Tutorial gefunden
www.pythonforbeginners.com/beautifulsoup

Da man dann und wann sich auch wo einloggen muss hab ich mal diesen Ansatz gewählt - und diese Übung - und logge mich hiermit auf meinen _eigenen_ Account ein.

M.a.W: - ist doch python 3 oder - siehe

Code: Alles auswählen

print(good_data.title) 

Code: Alles auswählen

import requests
import bs4 as bs
with requests.session() as c:
    link="https://gpldl.com/sign-in/" #link of the webpage to be logged in
    initial=c.get(link) #passing the get request
    login_data={"log":"*****","pwd":"******"} #the login data from any account on the site. Stars must be replaced with username and password
    page_login=c.post(link, data=login_data) #posting the login data into the link
    print(page_login) #checking status of requested page
    page=c.get("https://gpldl.com/my-gpldl-account/") #requesting source code of logged in page
    good_data = bs.BeautifulSoup(page.content, "lxml") #parsing it with BS4
    print(good_data.title) #printing this gives the title that is got from the page when accessed from an logged-out account

Werde das heute Abend nochmals verschen nachzuvollziehen....Da stimmt etwas nicht ganz.


Melde mich wieder.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Python2 vertraegt auch ein print(), und der Quellcode bestimmt nicht, welcher Interpreter hinter "python" steht. Da wird sich ja nicht erst der Code angeschaut, und dann entschieden.
Benutzeravatar
say_hello
User
Beiträge: 51
Registriert: Sonntag 14. Oktober 2012, 12:33

Moin _deets_

das leuchtet ein - also ich kann das dann halt so machen;

Voranstellen -

Code: Alles auswählen

python2 resp. python 3
...wenn ich will dass das mit der ein bzw. anderen Version laufen soll!?

Bin noch nicht zu Hause an dem entsprechenden Rechner sonder noch unterwegs - werde das aber heute Abend nochmals ausprobieren.

Vielen Dank nochmals - u. viele Grüße

Say
Benutzeravatar
say_hello
User
Beiträge: 51
Registriert: Sonntag 14. Oktober 2012, 12:33

guten Abend,

Habe nachgesehen: mit dem sys.version string im sys module:

Code: Alles auswählen

import sys
das Ergebnis:

Code: Alles auswählen

martin@linux-3645:~/dev/python> python sys.py
2.7.13 (default, Jan 03 2017, 17:41:54) [GCC]
so - nun muss ich - so glaube ich aufräumen. BZW - ggf. einfach dem System saagen dass ich das in Python 3 laufen lassen will.

Es ist OpenSuse 42.3 .- ich denke dass ich Python 3 (auch) installiert hab -

Werde mich nochmals dranmachen. VG und vielen Dank für Die Hilfe bis hierher.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

python3 eingeben reicht. Bitte nicht versuchen das „normale“ Python zu ersetzen. Dein System braucht das.
Benutzeravatar
say_hello
User
Beiträge: 51
Registriert: Sonntag 14. Oktober 2012, 12:33

hello und guten Abend __deets__


also ich denke dass das skript jetzt auch läuft - und das macht was es soll.


Danke nochmals!!!

viele Grüße
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

say_hello hat geschrieben:Habe nachgesehen: mit dem sys.version string im sys module:

Code: Alles auswählen

import sys
Ein einfaches python --version auf der Kommandozeile hätte übrigens auch gereicht, um an die Interpreter-Version zu kommen.

Und wenn du sichergehen willst, dass pip den "richtigen" Interpreter verwendet, dann nutze python -m pip install modulname. Hierdurch würdest du das Modul für das Kommando python installieren. Genau so ginge es natürlich auch mit dem Kommando python3.
Benutzeravatar
say_hello
User
Beiträge: 51
Registriert: Sonntag 14. Oktober 2012, 12:33

hallo und guten Tag snafu

vielen Dank für den Tipp.

Nach all den Korrekturen - bekomme ich jetzt immer noch kleine Feher zurückgemeldet...

Code: Alles auswählen



import requests
import bs4 as bs
with requests.session() as c:
    link="https://gpldl.com/sign-in/" #link of the webpage to be logged in
    initial=c.get(link) #passing the get request
    login_data={"log":"foobar","pwd":"7828Xdyb$3)"} #the login data from any account on the site. Stars must be replaced with username and password
    "rememberme":"forever", 
    "redirect_to":"https://gpldl.com/my-gpldl-account/", 
    "redirect_to_automatic": "1"
             }
    page_login = c.post('https://gpldl.com/wp-login.php', data=login_data)
    good_data = bs.BeautifulSoup(page.content, "lxml") #parsing it with BS4
    print(good_data.title) #printing this gives the title that is got from the page when accessed from an logged-out account
 

ergibt dann das hier ... - offensichtlich ein formaler Fehler :

Code: Alles auswählen

martin@linux-3645:~/dev/python> python3 w5.py
  File "w5.py", line 7
    "rememberme":"forever",                                                                                                                                                                     
                ^                                                                                                                                                                               
SyntaxError: invalid syntax                                                                                                                                                                     
martin@linux-3645:~/dev/python>         
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Da fehlt ein Komma in der Zeile davor.
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Formatiere deinen Code mal besser, dann blickt man da leichter durch. Zum einen kann man ruhig Leerzeichen benutzen, z.B. vor und nach dem Gleichheitszeichen bei einer Zuweisung. Zum anderen lässt sich Code speziell für Python formatieren. Dazu musst du hier direkt über dem Textfeld für den Beitrag auf "Code auswählen" klicken und dann Python nehmen.

Zu deinem Problem: Du schließt dein Dict login_data direkt in der selben Zeile mit einer geschweiften Klammer ab. Danach fügst du aber noch weitere Einträge dazu. Das funktioniert so nicht. Die schließende geschweifte Klammer muss ganz zum Schluss kommen, wenn alle Einträge festgelegt wurden.
Antworten