Python3:通过MechanicalSoup提交表单时没有任何反应

时间:2016-08-02 11:13:52

标签: python forms web-scraping mechanicalsoup

我需要在提交搜索表单后在网站上进行一些抓取。问题是,当我通过浏览器执行此操作时,页面不会重新加载,也不会重定向到任何位置:结果会显示在搜索表单下方,而不会对链接进行任何更改,尽管我可以在&#中看到它们34;新"页面HTML。 但是,当我使用以下代码时,我无法看到" new"页面html应该在响应中(提供的链接是我实际尝试使用的链接):

Order

我无法理解我错过了什么。我宁愿不使用硒。有线索吗?

1 个答案:

答案 0 :(得分:0)

我刚刚解决了同样的问题。我也是Python的新手,所以让我试着解释一下。

您正在“查找”页面上的元素,但您需要从表单搜索中获取结果并将其转换为Form对象,然后您可以设置表单对象的值并提交它。你提交之后没有得到任何回报的原因是因为你的表格价值实际上都没有设定,你只是在进行搜索。我知道这个问题已经很久了,但希望这对其他人也有帮助。我不知道“查询”的实际值应该是什么,所以我无法验证它是否有效,但在我的程序中这是我使用的方法。

import mechanicalsoup
import html5lib
from bs4 import BeautifulSoup

def fetchfile(query):

    url = "http://www.italgiure.giustizia.it/sncass/"

    browser = mechanicalsoup.Browser()
    page = browser.get(url)

    # Using page.find() with the appropriate attributes is also useful
    # for forms without names
    FORM = mechanicalsoup.Form(page.find('form', attrs={'id': 'z-form'}))

    FORM["searchterm"] = query

    # You can verify the form values are set by doing this:
    print("Form values: ", vars(FORM))

    response = browser.submit(FORM, url)

    print(response) # the response is 200, so it should be a good sign
    Results = browser.get_current_page()
    print("Results: ", Results)

    # actual parsing will come later...
    # quick-check to see if there is what I'm looking for, but I get False
    # print("1235" in response.text) 

    # in fact this...
    print(page.text == response.text) # ...gives me True

# fetchfile("1235/2012")