2017-11-15 1 views
0

Die Website, die ich analysieren möchte, hat nur ein Eingabefeld ohne Formular. Ich habe Probleme, nur das einzelne Eingabefeld zu definieren, ihm eine Adresse zu übergeben und dann zu senden.mechanicsoup - So geben Sie ein einzelnes Textfeld ein

Was ich tun möchte, ist eine Adresse eingeben, übermitteln, die Informationen unter id="A18"title="Click to get bulk trash pick up info" abrufen und in JSON laden.

Python:

import mechanicalsoup 

# URL that we authenticate against 
map_url = "http://mapservices.phoenix.gov/gis/imap/iMap.html" 
address = "<address>" 
json_file = "/home/pi/bulk_pickup.json" 

# Setup browser 
browser = mechanicalsoup.StatefulBrowser(
    soup_config={'features': 'lxml'}, 
    user_agent='Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.10 (maverick) Firefox/3.6.13', 
) 

# Open the login URL 
map_page = browser.get(map_url) 

# Similar to assert login_page.ok but with full status code in case of failure. 
map_page.raise_for_status() 

search_form = mechanicalsoup.Form(map_page.soup.select_one('input[id="search_input"]')) 

search_form.input({'search_input': address}) 
+1

Ist es eine öffentliche Website? Wenn ja, können Sie die URL angeben? –

+0

map_url = "http://mapservices.phoenix.gov/gis/imap/iMap.html" – solar411

+1

In der Tat, tut mir leid. Ich habe im Text nachgesehen, nicht nach dem Code. –

Antwort

1

Leider ist die Seite http://mapservices.phoenix.gov/gis/imap/iMap.html scheint einen intensiven Gebrauch von JavaScript zu tun. Das <input ...>-Tag, das Sie sehen, ist nicht einmal Teil eines <form>, und MechanicalSoup benötigt das Attribut action= des Formulars, um zu wissen, wo es übermittelt werden soll. Entweder müssen Sie die Low-Level-Sachen selbst hacken (aber MechanicalSoup wird nicht sehr hilfreich sein im Vergleich zu der Verwendung der blanken request-Bibliothek), oder Sie benötigen eine fortschrittlichere Lösung wie Selenium.

Weitere Informationen finden Sie unter http://mechanicalsoup.readthedocs.io/en/stable/faq.html#when-to-use-mechanicalsoup.

Wäre die Seite gewesen mehr „HTMLy“ und weniger „JavaScripty“ Sie

geschrieben haben könnte
browser.open(map_url) 
browser.select_form(...) 
browser["search_input"] = ... 
browser.submit_selected() 
Verwandte Themen