2017-10-06 8 views
0

私は1つ以上のフォームを含むウェブページを持っています。私は何をしたいです:投稿なしでフォームURLを取得する - Pythonを使用して

  1. フォーム
  2. は、POSTリクエストを送信し特定し、応答をキャッチ。

私はポイント1を超えています。私はrequests.getとBeautifulsoupを使ってWebページからフォームを識別しています。 私の質問は、フォームを提出せずにフォームURLを取得するにはどうすればよいですか?

例:私はhttps://stackoverflow.com/

の "テスト" を検索するURLは次のようになります。https://stackoverflow.com/search?q=test

私はこの部分を得ることに興味がある:?/検索Q他のサイトので、これらのケースではもっと複雑なURLを持っており、私はウェブサイトに依存しないスクレーパーを作りたいと思っています。

私が試した完全なコード:

ここ
from bs4 import BeautifulSoup 
import urllib.request 
import requests 
import mechanicalsoup 

#### What? 
search_words=['search1','search2'] 
website='http://www.website.com/' 
#### 
s=requests.Session() 
r=s.get(website) 
soup_main = BeautifulSoup(r.content,'lxml') 

form=soup_main.find('form') 
print(form) 
param={'searchword':search_words[0]} 

method = str(form.get("method")) 
print(method) 
action =form.get("action") 
url = urllib.parse.urljoin(website, action) 
print(action) 

request1=requests.Request(method,url,params=param) 
+0

これは、(相対的な)フォームとURLエンコードされたクエリ(フォームデータ)のアクションです。これは、GETクエリにのみ適用されます。 –

答えて

0

は、実施例がこれをやっている:q=が提出URLの一部ではないこと

>>> import mechanicalsoup                           
>>> browser = mechanicalsoup.StatefulBrowser()                     
>>> browser.open('https://stackoverflow.com/')                      
<Response [200]> 
>>> form = browser.select_form("form.searchbar") # Get a form with class 'searchbar' 
>>> action = form.form.attrs['action'] # Get the action="" field 
>>> browser.absolute_url(action) # Make the URL absolute 
'https://stackoverflow.com/search' 

注意、それは実際の一部です。 URLに与えられた引数あなたがでいつでもブラウザの状態を確認することができます

>>> browser.select_form("form.searchbar")                      
<mechanicalsoup.form.Form object at 0x7fb5ae5c3eb8> 
>>> browser["q"] = 'How to use MechanicalSoup?'                      
>>> browser.submit_selected() 
<Response [200]> 
>>> browser.get_url() 
'https://stackoverflow.com/search?q=How+to+use+MechanicalSoup%3F' 

あなたはこのURLで何をしたいのかに応じて、あなたもMechanicalSoupがあなたのためにフォームの送信を行うようにしたいことがあり

>>> browser.launch_browser() 
関連する問題