我正在嘗試使用Mechanize & BS4來抓取網上食品訂購網站。我面臨的問題是,該網站有一個表單,將位置作爲由Google提供支持的輸入。當我嘗試使用此方法填充它時:在Google抓取Google提供的值時提交價值
from bs4 import BeautifulSoup as bs
import requests, lxml, mechanize
url = raw_input("Enter URL: ")
browser = mechanize.Browser()
browser.open(url)
# 'placeSelectionForm' is the name of the input-field
browser.select_form(name='placeSelectionForm')
control1 = browser.form.controls[0]
control1._value = 'Koramangala'
browser.submit()
soup = bs(browser.response().read(), "lxml")
print soup.prettify()
該腳本適用於我製作的正常django表單。但這裏的問題是,谷歌驅動的形式使用自動完整的API是這樣的:
所以,當我鍵入一些位置的縮寫,也有自動完成建議,一旦我選擇一個選項表單自動提交,我被帶到一個新的URL。
現在,新頁面的URL的問題是,無論我在表單中選擇了什麼選項,URL都保持不變,並且響應中的值隨着我在上一次選擇的選項頁。
如何使用Mechanize或BS4等工具填寫此表單(由Google Maps API支持)?
它看起來像網站使用了大量的Javascript,所以你可能會發現很難使用Mechanize(它不能執行Javascript)。您可以使用瀏覽器的開發人員工具查看發送的GET/POST請求,然後嘗試使用[請求](http://docs.python-requests.org/en/latest/)來模擬這些請求。這可能也很困難,因此使用[Selenium](https://selenium-python.readthedocs.org/)可能會更容易。 –