2012-09-10 16 views
5

makineyi alamıyor Python kullanarak bir form doldurmaya ve göndermeye çalışıyorum ancak ortaya çıkan sayfayı alamıyorum. Formu göndermek için hem mekanizma hem de urllib/urllib2 yöntemlerini denedim, ancak her ikisi de sorunlara yol açtı.Python, urllib ile formu alamıyor veya

Almaya çalıştığım form şudur: http://zrs.leidenuniv.nl/ul/start.php. Sayfa Hollandaca, ama bu benim sorunumla alakasız. Form eyleminin http://zrs.leidenuniv.nl/ul/query.php'a yönlendirmesi dikkat çekebilir. Ben orijinal sayfayı olsun alınan html yazdırmaya çalıştığınızda, bir değil form işlemi ifade eder, ancak

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() 

: Herşeyden

Birincisi, bu denedim urllib/urllib2 yöntemidir için. Dolayısıyla, bu formun neden sunulmadığına dair herhangi bir ipucu büyük ölçüde takdir edilecektir.

Yukarıdaki işe yaramadığından, formu göndermek için mekaniği kullanmaya da çalıştım. Ancak, bu aşağıdaki kodla bir parseError sonuçlanır:

import mechanize 

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

Son satır aşağıdaki çıkar burada: "parseError: beklenmeyen '-' Char bildiriminde". Şimdi, bu hatanın DOCTYPE bildirgesindeki bir hatayı gösterebileceğini anlıyorum, ancak form sayfasını düzenleyemediğimden, farklı bildirimleri denemiyorum. Bu hata ile ilgili herhangi bir yardım da büyük beğeni topluyor.

Yardımlarınız için şimdiden teşekkür ederiz.

cevap

1

Çünkü DOCTYPE bölümü bozuk. Sadece mechanizes html ayrıştırıcı mutlu etmek için önemsiz kapalı şerit olabilir, Yine ...

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

sayfa kendiniz validating deneyin


:

Ayrıca gibi bazı tuhaf etiketlerini içerir:

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

Teşekkürler, bu işe yaradı! Hızlı cevabınız için teşekkürler. – GjjvdBurg

+0

Diğer etiketleri de [BeautifulSoup kullanarak] kaldırabilirsiniz (http://stackoverflow.com/questions/5598524/can-i-remove-script-tags-with-beautifulsoup) – enkash