2012-09-10 9 views
5

私はPythonを使用してフォームを記入して提出しようとしていますが、結果のページを取得できません。私は機械化とurllib/urllib2の両方のメソッドを使ってフォームを投稿しようとしましたが、どちらも問題に遭遇しました。Pythonはurllibまたはmechanizeでフォームを取得できません

私が検索しようとしているフォームは、ここにあります:http://zrs.leidenuniv.nl/ul/start.phpです。このページはオランダ語で書かれていますが、これは私の問題とは関係ありません。フォームアクションがhttp://zrs.leidenuniv.nl/ul/query.phpにリダイレクトされることは注目すべきです。

import urllib, urllib2 
import socket, cookielib 

url = 'http://zrs.leidenuniv.nl/ul/start.php' 
params = {'day': 1, 'month': 5, 'year': 2012, 'quickselect' : "unchecked", 
      'res_instantie': '_ALL_', 'selgebouw': '_ALL_', 'zrssort': "locatie", 
      'submit' : "Uitvoeren"} 
http_header = { "User-Agent" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.46 Safari/535.11", 
       "Accept" : "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 
       "Accept-Language" : "nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4" } 

timeout = 15 
socket.setdefaulttimeout(timeout) 

request = urllib2.Request(url, urllib.urlencode(params), http_header) 
response = urllib2.urlopen(request) 

cookies = cookielib.CookieJar() 
cookies.extract_cookies(response, request) 
cookie_handler = urllib2.HTTPCookieProcessor(cookies) 
redirect_handler = urllib2.HTTPRedirectHandler() 

opener = urllib2.build_opener(redirect_handler, cookie_handler) 

response = opener.open(request) 
html = response.read() 

をしかし、私は、取得したHTMLを印刷しようとすると、私は元のページではなく、フォームのアクションが参照するものを得る:

まず第一に、これは私が試したurllibは/ urllib2の方法であり、に。だから、なぜこれがフォームを提出しないのかについてのヒントがあれば大いに感謝します。

上記がうまくいかなかったため、私もmechanizeを使ってフォームを送信しようとしました。 「ParseErrorです:: 『 - 』宣言のchar予想外の」最後の行は次のように終了し

import mechanize 

url = 'http://zrs.leidenuniv.nl/ul/start.php' 
br = mechanize.Browser() 
response = br.open(url) 
br.select_form(nr = 0) 

:しかし、これは次のコードでParseErrorですになります。今私はこのエラーがDOCTYPE宣言のエラーを示すかもしれないが、私はフォームページを編集できないので、私は別の宣言を試すことができないことに気付きました。このエラーの助けも大歓迎です。

ご協力いただきありがとうございます。

答えて

1

DOCTYPEの部分が不正です。あなただけの機械化のHTMLパーサを幸せにするためにジャンクを取り除くことができ、それにもかかわらず...

<!Co Dreef/Eelco de Graaff Faculteit der Rechtsgeleerdheid Universiteit Leiden><!e-mail [email protected] > 

ページを自分validatingを試してみてください


を:

はまた、それは次のようにいくつかの奇妙なタグが含まれています。

import mechanize 

url = 'http://zrs.leidenuniv.nl/ul/start.php' 

br = mechanize.Browser() 
response = br.open(url) 
response.set_data(response.get_data()[177:]) 
br.set_response(response) 

br.select_form(nr = 0) 
+0

ありがとうございました!早速お返事をいただきありがとうございます。 – GjjvdBurg

+0

他のタグも削除することができます[BeautifulSoup](http://stackoverflow.com/questions/5598524/can-i-remove-script-tags-with-beautifulsoup) – enkash

関連する問題