2012-09-10 14 views
5

के साथ फॉर्म पुनर्प्राप्त करने में असमर्थ है, मैं पाइथन का उपयोग करके फ़ॉर्म भरने और सबमिट करने का प्रयास कर रहा हूं, लेकिन मैं परिणामस्वरूप पृष्ठ पुनर्प्राप्त करने में सक्षम नहीं हूं। मैंने फॉर्म पोस्ट करने के लिए मशीनीकरण और urllib/urllib2 विधियों दोनों की कोशिश की है, लेकिन दोनों समस्याओं में भाग लेते हैं।पायथन urllib या मशीनीकरण

जिस फ़ॉर्म को मैं पुनर्प्राप्त करने का प्रयास कर रहा हूं वह यहां है: 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() 

जब मैं लिया गया एचटीएमएल मैं मूल पृष्ठ मिल प्रिंट करने का प्रयास हालांकि,, नहीं एक रूप कार्रवाई संदर्भित करता है:

सबसे पहले, इस urllib/urllib2 विधि मैं कोशिश की है है सेवा मेरे। तो किसी भी संकेत के रूप में यह फ़ॉर्म जमा क्यों नहीं करता है इसकी सराहना की जाएगी।

क्योंकि उपर्युक्त काम नहीं करता है, इसलिए मैंने फॉर्म जमा करने के लिए मशीनीकरण का उपयोग करने का भी प्रयास किया। बहरहाल, यह निम्न कोड के साथ एक ParseError में परिणाम:

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 भाग विकृत है।

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

प्रयास करें validating पेज अपने आप को


बहरहाल, तुम सिर्फ जंक mechanizes HTML पार्सर खुश करने के लिए बंद पट्टी कर सकते हैं ...:

इसके अलावा यह कुछ अजीब टैग की तरह शामिल हैं:

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

आप अन्य टैग को भी बंद कर सकते हैं [सुंदर सूप का उपयोग करके] (http://stackoverflow.com/questions/5598524/can-i-remove-script-tags-with-beautifulsoup) – enkash

संबंधित मुद्दे