2010-04-02 15 views
8

मुझे पाइथन लिपि के माध्यम से कुछ HTML पृष्ठों तक पहुंचने की आवश्यकता है, समस्या यह है कि मुझे कुकी कार्यक्षमता की आवश्यकता है, इसलिए एक सरल urllib HTTP अनुरोध काम नहीं करेगा।ब्राउज़र सिमुलेशन - पायथन

कोई विचार?

+0

अजगर के कई जावास्क्रिप्ट आधारित कार्यान्वयन उपलब्ध हैं (जो किसी भी अतिरिक्त प्लगइन के बिना एक वेब ब्राउज़र में चला सकते हैं)। क्या यह प्रासंगिक होगा? http://syntensity.com/static/python.html –

उत्तर

14

जांच Mechanize। "पाइथन में राज्यव्यापी प्रोग्रामेटिक वेब ब्राउजिंग"।
यह स्वचालित रूप से कुकीज़ को संभालता है।

import mechanize 

br = mechanize.Browser() 
resp = br.open("http://www.mysitewithcookies.com/") 
print resp.info() # headers 
print resp.read() # content 

मशीनी भी डिफ़ॉल्ट रूप से सक्षम कुकी हैंडलिंग के साथ urllib2 एपीआई का खुलासा करता है।

+0

यद्यपि काफी धीमी हो सकती है, इसलिए वाईएमएमवी। –

+0

ग्रेग, क्या आप समझा सकते हैं? इसके मूल रूप से urllib2 –

+0

@Gregg के आसपास बस एक रैपर आप समझा सकते हैं? : डी – RadiantHex

2

यहां कुछ ऐसा है जो कुकीज़ करता है, और बोनस के रूप में एक साइट के लिए प्रमाणीकरण करता है जिसके लिए उपयोगकर्ता नाम और पासवर्ड की आवश्यकता होती है।

import urllib2 
import cookielib 
import string 



def cook(): 
    url="http://wherever" 
    cj = cookielib.LWPCookieJar() 
    authinfo = urllib2.HTTPBasicAuthHandler() 
    realm="realmName" 
    username="userName" 
    password="passWord" 
    host="www.wherever.com" 
    authinfo.add_password(realm, host, username, password) 
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj), authinfo) 
    urllib2.install_opener(opener) 

    # Create request object 
    txheaders = { 'User-agent' : "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)" } 
    try: 
     req = urllib2.Request(url, None, txheaders) 
     cj.add_cookie_header(req) 
     f = urllib2.urlopen(req) 

    except IOError, e: 
     print "Failed to open", url 
     if hasattr(e, 'code'): 
      print "Error code:", e.code 

    else: 

     print f 
     print f.read() 
     print f.info() 
     f.close() 
     print 'Cookies:' 
     for index, cookie in enumerate(cj): 
      print index, " : ", cookie  
     cj.save("cookies.lwp") 
+0

@ मार्क: बहुत बहुत धन्यवाद! यह पूरी तरह से काम किया! – RadiantHex

+0

शायद आपको यह जवाब स्वीकार करना चाहिए, आरएच, अगर आपने यह आपके लिए काम किया है। –

3

cookielib module HTTP क्लाइंट के लिए कुकी हैंडलिंग प्रदान करता है।

cookielib मॉड्यूल HTTP कुकीज़ के स्वचालित संचालन के लिए कक्षाओं को परिभाषित करता है। यह वेब साइटों तक पहुंचने के लिए उपयोगी है जिसके लिए डेटा के छोटे टुकड़े की आवश्यकता होती है - कुकीज - क्लाइंट मशीन पर एक वेब सर्वर से HTTP प्रतिक्रिया द्वारा सेट किया जाना चाहिए, और उसके बाद बाद में HTTP अनुरोधों में सर्वर पर लौटा दिया जाता है।

डॉक शो कैसे urllib साथ संयोजन के रूप में कुकीज़ को संसाधित करने में उदाहरण:

import cookielib, urllib2 
cj = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
r = opener.open("http://example.com/") 
0

क्यों आप इस के लिए Dryscrape कोशिश नहीं:

Import dryscrape as d 
d.start_xvfb() 
Br = d.Session() 
Br.visit('http://URL.COM') 
#open webpage 
Br.at_xpath('//*[@id = "email"]').set('[email protected]') 
#finding input by id 
Br.at_xpath('//*[@id = "pass"]').set('pasword') 
Br.at_xpath('//*[@id = "submit_button"]').click() 
#put id of submit button and click it 

आप कुकी lib की जरूरत नहीं है कुकी संग्रहीत करने के लिए सिर्फ स्थापित Dryscrape और अपनी शैली में ऐसा

+0

कृपया एक अलग प्रश्न को बढ़ावा देने के लिए उत्तर का उपयोग न करें। – Machavity

+0

के लिए यह बकाया है कि इसके लिए खेद है, लेकिन कोई भी बॉडी मेरे प्रश्न का उत्तर नहीं देती है कि क्यों किसी भी तरह से खेद है – Harry1992

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