Frage

Die Busgesellschaft ich läuft eine schreckliche Website ( Hebräisch , Englisch ), die ein einfaches „Von A nach B Zeitplan heute“ Abfrage ein Alptraum zu machen. Ich vermute, dass sie versuchen, die Verwendung des teueren SMS-Abfrage-Systems zu fördern.

Ich versuche, den gesamten Zeitplan von der Website zu ernten, indem Sie die Abfrage für jeden möglichen Punkt zu jedem möglichen Punkt einreichen, was etwa 10k Abfragen summieren würde. Das Abfrageergebnis wird in einem Popup-Fenster. Ich bin ganz neu in Web-Programmierung, aber mit den grundlegenden Aspekten des Pythons.

  1. Was die eleganteste Weg, um die Seite zu analysieren, wählen Sie einen Wert fro ein Dropdown-Menü, und drücken Sie auf „Eintragen“ ein Skript verwenden?
  2. Wie gebe ich das Programm den Inhalt des neuen Pop-up als Input?

Danke!

War es hilfreich?

Lösung

Twill ist eine einfache Skriptsprache für Web-Browsing. Es kommt vor dem Sport ein python api .

  

Twill ist im Wesentlichen eine dünne Schale um das mechanize Paket. Alle Twill-Befehle werden in der commands.py-Datei implementiert und pyparsing macht die Arbeit des Eingangs Parsen und es in Python-Befehle (siehe parse.py) zu konvertieren. Interaktive Rohbauarbeiten und Readline- Unterstützung werden über das cmd-Modul implementiert (von der Standard-Python-Bibliothek).

Ein Beispiel für „drücken“ aus dem oben verlinkten Dokument einreichen:

from twill.commands import go, showforms, formclear, fv, submit

go('http://issola.caltech.edu/~t/qwsgi/qwsgi-demo.cgi/')
go('./widgets')
showforms()

formclear('1')
fv("1", "name", "test")
fv("1", "password", "testpass")
fv("1", "confirm", "yes")
showforms()

submit('0')

Andere Tipps

Ich würde vorschlagen, Sie verwenden mechanize . Hier ist ein Code-Schnipsel aus ihrer Seite, die zeigt, wie ein Formular einreichen:


import re
from mechanize import Browser

br = Browser()
br.open("http://www.example.com/")
# follow second link with element text matching regular expression
response1 = br.follow_link(text_regex=r"cheese\s*shop", nr=1)
assert br.viewing_html()
print br.title()
print response1.geturl()
print response1.info()  # headers
print response1.read()  # body
response1.close()  # (shown for clarity; in fact Browser does this for you)

br.select_form(name="order")
# Browser passes through unknown attributes (including methods)
# to the selected HTMLForm (from ClientForm).
br["cheeses"] = ["mozzarella", "caerphilly"]  # (the method here is __setitem__)
response2 = br.submit()  # submit current form

# print currently selected form (don't call .submit() on this, use br.submit())
print br.form

Sie wollen sehr selten tatsächlich „drücken Sie die Submit-Button“, anstatt zu machen GET oder POST-Anfragen an die Handler Ressource direkt. Schauen Sie sich die HTML, wo die Form ist, und sehen Sie, welche Parameter seine einreichenden in welcher URL, und wenn es GET oder POST-Methode. Sie können diese Anforderungen mit urllib (2) bilden leicht genug.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top