Seite 1 von 1
Mechanize Fehler bei addheaders
Verfasst: Sonntag 25. Juni 2017, 16:45
von phoenixx592
Hallo Freunde,
Ich versuche mich grade an das Modul Mechanize, nur leider bekomme ich eine Fehlermeldung:
Code: Alles auswählen
import mechanize
br = mechanize.Browser()
br.set_handle_robots(False)
br.addheaders[("User-agent", "Mozilla/5.0")
br.open('www.google.de')
br.select_form(nr=0)
br.form['q'] = 'test'
sub = br.submit()
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 ?

Re: Mechanize Fehler bei addheaders
Verfasst: Sonntag 25. Juni 2017, 17:02
von snafu
Nein, das ist nicht richtig. Einen einzelnen Header kannst du so setzen:
Und im Falle von addheaders ist dies der richtige Weg:
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.
Re: Mechanize Fehler bei addheaders
Verfasst: Sonntag 25. Juni 2017, 17:02
von phoenixx592
Code: Alles auswählen
import mechanize
br = mechanize.Browser()
br.set_handle_robots(False)
br.addheaders("User-agent", "Firefox")
br.open('www.google.de')
br.select_form(nr=0)
br.form['q'] = 'test'
sub = br.submit()
print(sub.geturl())
Fehlercode
line 6, in <module>
br.addheaders("User-agent", "Firefox")
TypeError: 'list' object is not callable
Re: Mechanize Fehler bei addheaders
Verfasst: Sonntag 25. Juni 2017, 17:03
von phoenixx592
Okay vielen dank mal so neben bei was sind diese headers?
Re: Mechanize Fehler bei addheaders
Verfasst: Sonntag 25. Juni 2017, 17:07
von phoenixx592
Funktioniert aber auch nicht ...
Code: Alles auswählen
import mechanize
br = mechanize.Browser()
br.set_handle_robots(False)
br.addheaders = [("User-agent", "Mozilla/5.0")]
br.open('www.google.de')
br.select_form(nr=0)
br.form['q'] = 'test'
sub = br.submit()
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
Re: Mechanize Fehler bei addheaders
Verfasst: Sonntag 25. Juni 2017, 17:08
von snafu
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).
Re: Mechanize Fehler bei addheaders
Verfasst: Sonntag 25. Juni 2017, 17:10
von phoenixx592
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?
Code: Alles auswählen
import mechanize
br = mechanize.Browser()
br.set_handle_robots(False)
br.add_header("User-agent", "Mozilla/5.0")
br.open('www.google.de')
br.select_form(nr=0)
br.form['q'] = 'test'
sub = br.submit()
print(sub.geturl())
AttributeError: mechanize._mechanize.Browser instance has no attribute add_header (perhaps you forgot to .select_form()?)
Re: Mechanize Fehler bei addheaders
Verfasst: Sonntag 25. Juni 2017, 17:16
von BlackJack
@phoenixx592: Die Dokumentation sagt, dass die Methode
set_header() heisst.
Re: Mechanize Fehler bei addheaders
Verfasst: Sonntag 25. Juni 2017, 17:19
von phoenixx592
Re: Mechanize Fehler bei addheaders
Verfasst: Sonntag 25. Juni 2017, 17:36
von snafu
Bei mir funktioniert es so:
Code: Alles auswählen
def get_google_search_url(query):
br = mechanize.Browser()
br.set_handle_robots(False)
br.addheaders = [('User-agent', 'Mozilla/5.0')]
br.open('http://www.google.com/')
br.select_form(nr=0)
br.form['q'] = query
br.submit()
return br.geturl()
def main():
print(get_google_search_url('test'))
if __name__ == '__main__':
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...
Re: Mechanize Fehler bei addheaders
Verfasst: Sonntag 25. Juni 2017, 17:42
von snafu
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/
Re: Mechanize Fehler bei addheaders
Verfasst: Sonntag 25. Juni 2017, 17:45
von BlackJack
@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.
Re: Mechanize Fehler bei addheaders
Verfasst: Sonntag 25. Juni 2017, 17:47
von BlackJack
@snafu: Ich würde ja `set_header()` benutzen, statt den alten Wert von `addheaders` einfach so zu überschreiben.
Re: Mechanize Fehler bei addheaders
Verfasst: Montag 26. Juni 2017, 13:55
von snafu
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.
Re: Mechanize Fehler bei addheaders
Verfasst: Montag 26. Juni 2017, 17:47
von phoenixx592
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?
Danke für den Code funktioniert super, das soll nur ein reiner Lerneffekt sein.

Re: Mechanize Fehler bei addheaders
Verfasst: Montag 26. Juni 2017, 19:39
von BlackJack
@phoenixx592: Das soll heissen das Google das in der `robots.txt` verbietet und es bei Dir nur funktioniert weil Du Dich mit ``br.set_handle_robots(False)`` über dieses Verbot hinweg setzt.