Mechanize Fehler bei addheaders

Django, Flask, Bottle, WSGI, CGI…
phoenixx592
User
Beiträge: 46
Registriert: Sonntag 25. Juni 2017, 16:41

Mechanize Fehler bei addheaders

Beitragvon phoenixx592 » Sonntag 25. Juni 2017, 16:45

Hallo Freunde,
Ich versuche mich grade an das Modul Mechanize, nur leider bekomme ich eine Fehlermeldung:

  1. import mechanize
  2.  
  3. br = mechanize.Browser()
  4. br.set_handle_robots(False)
  5. br.addheaders[("User-agent", "Mozilla/5.0")
  6. br.open('www.google.de')
  7. br.select_form(nr=0)
  8. br.form['q'] = 'test'
  9. sub = br.submit()
  10. print(sub.geturl())



Fehlermeldung:
line 5, in <module> br.addheaders[("User-agent", "Mozilla/5.0")]
TypeError: list indices must be integers, not tuple

Ist doch eighendlich richtig ? Er soll auf google gehen und test suchen mir die url dann ausgeben ? :x :x
Zuletzt geändert von Anonymous am Sonntag 25. Juni 2017, 17:18, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Benutzeravatar
snafu
User
Beiträge: 5389
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Re: Mechanize Fehler bei addheaders

Beitragvon snafu » Sonntag 25. Juni 2017, 17:02

Nein, das ist nicht richtig. Einen einzelnen Header kannst du so setzen:
  1. br.add_header("User-agent", "Mozilla/5.0")


Und im Falle von addheaders ist dies der richtige Weg:
  1. br.addheaders = [("User-agent", "Mozilla/5.0")]


Du benötigst also eine Zuweisung mittels Gleichheitszeichen. Was du machst, ist eine Abfrage. Und Listen lassen sich - wie die Fehlermeldung schon sagt - sowieso nicht mit Tupeln abfragen, sondern nur mit Integern via Listenindex.
Zuletzt geändert von snafu am Sonntag 25. Juni 2017, 17:04, insgesamt 1-mal geändert.
shcol (Repo | Doc | PyPi)
phoenixx592
User
Beiträge: 46
Registriert: Sonntag 25. Juni 2017, 16:41

Re: Mechanize Fehler bei addheaders

Beitragvon phoenixx592 » Sonntag 25. Juni 2017, 17:02

  1. import mechanize
  2.  
  3.  
  4. br = mechanize.Browser()
  5. br.set_handle_robots(False)
  6. br.addheaders("User-agent", "Firefox")
  7. br.open('www.google.de')
  8. br.select_form(nr=0)
  9. br.form['q'] = 'test'
  10. sub = br.submit()
  11. print(sub.geturl())



Fehlercode

line 6, in <module>
br.addheaders("User-agent", "Firefox")
TypeError: 'list' object is not callable
Zuletzt geändert von Anonymous am Sonntag 25. Juni 2017, 17:17, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
phoenixx592
User
Beiträge: 46
Registriert: Sonntag 25. Juni 2017, 16:41

Re: Mechanize Fehler bei addheaders

Beitragvon phoenixx592 » Sonntag 25. Juni 2017, 17:03

Okay vielen dank mal so neben bei was sind diese headers?
phoenixx592
User
Beiträge: 46
Registriert: Sonntag 25. Juni 2017, 16:41

Re: Mechanize Fehler bei addheaders

Beitragvon phoenixx592 » Sonntag 25. Juni 2017, 17:07

Funktioniert aber auch nicht ...

  1. import mechanize
  2.  
  3.  
  4. br = mechanize.Browser()
  5. br.set_handle_robots(False)
  6. br.addheaders = [("User-agent", "Mozilla/5.0")]
  7. br.open('www.google.de')
  8. br.select_form(nr=0)
  9. br.form['q'] = 'test'
  10. sub = br.submit()
  11. print(sub.geturl())


C:\Python27\python.exe C:/Users/Admin/PycharmProjects/Maker/Maker.py
Traceback (most recent call last):
File "C:/Users/Admin/PycharmProjects/Maker/Maker.py", line 7, in <module>
br.open('www.google.de')
File "C:\Python27\lib\site-packages\mechanize\_mechanize.py", line 203, in open
return self._mech_open(url, data, timeout=timeout)
File "C:\Python27\lib\site-packages\mechanize\_mechanize.py", line 216, in _mech_open
"can't fetch relative reference: "
mechanize._mechanize.BrowserStateError: can't fetch relative reference: not viewing any document

Process finished with exit code 1
Zuletzt geändert von Anonymous am Sonntag 25. Juni 2017, 17:17, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Benutzeravatar
snafu
User
Beiträge: 5389
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Re: Mechanize Fehler bei addheaders

Beitragvon snafu » Sonntag 25. Juni 2017, 17:08

phoenixx592 hat geschrieben:mal so neben bei was sind diese headers?

Header liefern verschiedene Informationen an den Server. Der User-Agent sagt dem Server, welches Programm zur Verarbeitung der Daten verwendet wird, in deinem Fall ist es ein Browser (genau genommen: Firefox).
shcol (Repo | Doc | PyPi)
phoenixx592
User
Beiträge: 46
Registriert: Sonntag 25. Juni 2017, 16:41

Re: Mechanize Fehler bei addheaders

Beitragvon phoenixx592 » Sonntag 25. Juni 2017, 17:10

Okay danke hab ich mir schon fast gedacht.

aber ich bekomme immernoch die fehlermeldung ... gibt es nicht irgendwo ne gute Lektüre über mechanize bzw. HTTP requests?

  1. import mechanize
  2.  
  3.  
  4. br = mechanize.Browser()
  5. br.set_handle_robots(False)
  6. br.add_header("User-agent", "Mozilla/5.0")
  7. br.open('www.google.de')
  8. br.select_form(nr=0)
  9. br.form['q'] = 'test'
  10. sub = br.submit()
  11. print(sub.geturl())


AttributeError: mechanize._mechanize.Browser instance has no attribute add_header (perhaps you forgot to .select_form()?)
Zuletzt geändert von Anonymous am Sonntag 25. Juni 2017, 17:16, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

Re: Mechanize Fehler bei addheaders

Beitragvon BlackJack » Sonntag 25. Juni 2017, 17:16

@phoenixx592: Die Dokumentation sagt, dass die Methode set_header() heisst.
phoenixx592
User
Beiträge: 46
Registriert: Sonntag 25. Juni 2017, 16:41

Re: Mechanize Fehler bei addheaders

Beitragvon phoenixx592 » Sonntag 25. Juni 2017, 17:19

Aller Anfang ist schwer,
wie würdet ihr den das Skript schreiben... bei mir funktioniert in Sachen Mechanize echt garnichts :? :? :? :?
Benutzeravatar
snafu
User
Beiträge: 5389
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Re: Mechanize Fehler bei addheaders

Beitragvon snafu » Sonntag 25. Juni 2017, 17:36

Bei mir funktioniert es so:
  1. def get_google_search_url(query):
  2.     br = mechanize.Browser()
  3.     br.set_handle_robots(False)
  4.     br.addheaders = [('User-agent', 'Mozilla/5.0')]
  5.     br.open('http://www.google.com/')
  6.     br.select_form(nr=0)
  7.     br.form['q'] = query
  8.     br.submit()
  9.     return br.geturl()
  10.  
  11. def main():
  12.     print(get_google_search_url('test'))
  13.  
  14. if __name__ == '__main__':
  15.     main()


Dass Robots durch Google verboten wurden, sollte dir aber zu denken geben, ob es nicht einen anderen Weg gibt, um die URL zu erhalten...
shcol (Repo | Doc | PyPi)
Benutzeravatar
snafu
User
Beiträge: 5389
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Re: Mechanize Fehler bei addheaders

Beitragvon snafu » Sonntag 25. Juni 2017, 17:42

Was genau hast du denn vor? Willst du die Google-Suche auf einer Webseite integrieren? Dann könnte Google Custom Search für dich interessant sein:
Mit der benutzerdefinierten Suche von Google wird zu Ihrer Startseite ein Suchfeld hinzugefügt, damit Nutzer benötigte Informationen auf Ihrer Website schneller finden.

https://cse.google.com/cse/
shcol (Repo | Doc | PyPi)
BlackJack

Re: Mechanize Fehler bei addheaders

Beitragvon BlackJack » Sonntag 25. Juni 2017, 17:45

@phoenixx592: Naja, *richtig* würde ich es schreiben. Weil sonst funktioniert es ja nicht. ;-)

Ein anderer Fehler den Du gemacht hast ist das Argument von `Broser.open()`. Das muss eine URL sein. Du möchtest da vielleicht mit 'http://' oder so anfangen damit das eine URL wird.
BlackJack

Re: Mechanize Fehler bei addheaders

Beitragvon BlackJack » Sonntag 25. Juni 2017, 17:47

@snafu: Ich würde ja `set_header()` benutzen, statt den alten Wert von `addheaders` einfach so zu überschreiben.
Benutzeravatar
snafu
User
Beiträge: 5389
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Re: Mechanize Fehler bei addheaders

Beitragvon snafu » Montag 26. Juni 2017, 13:55

set_header() führt leider bei mir zu dem AttributeError, den der OP hier bereits gezeigt hat. Kann sein, dass ich eine veraltete Version von mechanize verwende...

EDIT:
Jepp, ich hatte mechanize 0.2.5 drauf. Ein Upgrade auf die Version 0.3.5 hat die Fehlermeldung beseitigt.
shcol (Repo | Doc | PyPi)
phoenixx592
User
Beiträge: 46
Registriert: Sonntag 25. Juni 2017, 16:41

Re: Mechanize Fehler bei addheaders

Beitragvon phoenixx592 » Montag 26. Juni 2017, 17:47

Dass Robots durch Google verboten wurden, sollte dir aber zu denken geben, ob es nicht einen anderen Weg gibt, um die URL zu erhalten...


was soll das heißen das es durch Google verboten wurde? :D

Danke für den Code funktioniert super, das soll nur ein reiner Lerneffekt sein. :wink:

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder