2016-08-02 8 views
1

検索フォームを送信した後、ウェブサイトで何らかのスクレイピングを実行する必要があります。問題は、ブラウザでこれを行うと、ページがリロードされず、どこにでもリダイレクトされるということです。検索結果の下に結果が表示されるのは、リンクを変更せずに、「新しい」ページに表示されますhtml。 しかし、私は次のコードを使用する場合、私は(提供されたリンクは、私が実際に動作するようにしようとしているものです)応答であるべき「新しい」ページのHTMLを見ることができません。Python3:MechanicalSoup経由でフォームを送信しても何も起こりません

import mechanicalsoup 

def fetchfile(query): 

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

    browser = mechanicalsoup.Browser() 
    page = browser.get(url) 
    search_form = page.soup.find("form", {"id": "z-form"}) 
    search_form.find("input", {"id":"searchterm"})["value"] = query 
    response = browser.submit(search_form, page.url) 

    print(response) # the response is 200, so it should be a good sign 

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

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

fetchfile("1235/2012") 

私ができます私は何が欠けているのか理解していない。私はむしろセレンを使用しません。すべての手がかりは?

答えて

0

私はちょうど同じ問題で苦労し終わった。私はPythonもかなり新しくなっているので、説明しよう。

ページの要素を「検索」していますが、フォーム検索の結果をフォームオブジェクトに変換してから、フォームオブジェクトの値を設定して送信する必要があります。あなたのフォームの値が実際に設定されていないので、あなたがそれを提出した後に何も戻ってこない理由は、単に検索しているだけです。私はこの質問が古いことを知っていますが、うまくいけば、これも他の人を助けるでしょう。私は "照会"の実際の価値がどうなっているのかわからないので、私はそれが動作することを確認することはできませんが、私のプログラムでこれは私が使用した方法です。答えを

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") 
+0

おかげで、しかし最後に、私は結果を提出した後、私はpdfファイルをダウンロードする必要があるため、セレンを使用していた...セレンや「クリックを使用するよりも他の方法がないようです"その結果。私の新しい問題はrobots.txtですが、私が遵守したい場合は私ができることはほとんどありません –

関連する問題