2017-01-31 5 views
11

में सदस्यता साइट से कनेक्शन बनाना मैं पाइथन से http://www.horseandcountry.tv पर कनेक्शन खोलने के लिए देख रहा हूं जो POST विधि के माध्यम से मेरे लॉगिन पैरामीटर लेता है। मैं इस वीडियो के लिए सभी वीडियो लिंक के लिए साइट को स्क्रैप करने के लिए एक कनेक्शन खोलना चाहता हूं (यह, मुझे यह भी नहीं पता कि अभी तक कैसे करना है लेकिन सीखने के लिए प्रोजेक्ट का उपयोग कर रहा हूं)।पायथन

मेरा सवाल यह है कि मैं वेबसाइट के अलग-अलग पृष्ठों पर अपने प्रमाण-पत्र कैसे पास करूं? उदाहरण के लिए यदि मैं बस इतना करना चाहता था कि http://play.horseandcountry.tv/live/ पर इंगित करने वाली ब्राउज़र विंडो खोलने के लिए पायथन कोड का उपयोग करें और मेरे साथ पहले से लॉग इन किया गया है, तो मैं इसके बारे में कैसे जा सकता हूं?

1) urllib का उपयोग करें:

उत्तर

7

जहाँ तक मुझे पता के रूप में आप आधार पर दो विकल्प कैसे आप क्रॉल करने के लिए चाहते हैं और क्या आप क्रॉल करने के लिए की जरूरत है। आप आवश्यक लॉगिन प्रमाण-पत्रों के साथ अपना POST अनुरोध कर सकते हैं। यह निम्न स्तर का समाधान है, जिसका अर्थ है कि यह तेज़ है, लेकिन जावास्क्रिप्ट कोड जैसे उच्च स्तरीय सामान को संभाल नहीं करता है।

2) selenium का उपयोग करें। जिसके साथ आप एक ब्राउज़र (क्रोम, फ़ायरफ़ॉक्स, अन्य ..) अनुकरण कर सकते हैं, और अपने पायथन कोड के माध्यम से क्रियाएं चला सकते हैं। फिर यह बहुत धीमा है लेकिन बहुत "परिष्कृत" वेबसाइटों के साथ अच्छी तरह से काम करता है।

मैं आमतौर पर क्या करता हूं: मैं पहला विकल्प आज़माता हूं और यदि किसी वेबसाइट पर जावास्क्रिप्ट सुरक्षा परत की तरह कोई समस्या आती है, तो विकल्प 2 के लिए जाएं। इसके अलावा, सेलेनियम आपके डेस्कटॉप से ​​एक वास्तविक वेब ब्राउज़र खोल सकता है और आपको दे सकता है आपके स्क्रैपिंग का एक दृश्य।

किसी भी मामले में, बस "urllib/सेलेनियम वेबसाइट पर लॉगिन करें" और आपको जो चाहिए वह आपको मिलेगा।

+0

यह सेलेनियम करना होगा कि वास्तव में क्या मैं के बाद कर रहा हूँ की तरह लगता है का अनुरोध करता है, तो यह निश्चित रूप से सही जवाब है। आखिर में मैं इसे रास्पबेरी पीआई पर कोडी एडन के रूप में चलाने के लिए चाहता हूं इसलिए इस पुस्तकालय तक पहुंच नहीं होगी! मैं उम्मीद करता हूं कि मैं अकेले उस चीज़ को प्राप्त कर सकता हूं जिसे मैं अकेले ढूंढ रहा हूं! धन्यवाद – user2145312

+0

जैसा कि अन्य बताया गया है, अनुरोध नौकरी भी करते हैं (जैसे urllib)। मैं पहले से ही रास्पबेरी पाई पर सेलेनियम चला रहा हूं, कुछ कम्प्यूटेशनल संसाधनों को छोड़ने के लिए फ़ैंटॉमजेएस को वेब ब्राउज़र (कोई ग्राफिकल इंटरफ़ेस) के रूप में उपयोग करने का प्रयास करें। – debzsud

1

आप सेलेनियम का उपयोग कर (वेब ​​ब्राउज़र खोलने) से बचना चाहते हैं, तो आप, अनुरोधों के लिए जाना यह वेबसाइट के लिए लॉग इन और कुछ भी आप पृष्ठभूमि में की जरूरत प्राप्त कर सकते हैं कर सकते हैं।

यहां बताया गया है कि आप अनुरोध के साथ उस वेबसाइट पर कैसे लॉगिन कर सकते हैं।

import requests 
from bs4 import BeautifulSoup 

#Login Form Data 
payload = { 
    'account_email': 'your_email', 
    'account_password': 'your_passowrd', 
    'submit': 'Sign In' 
} 

with requests.Session() as s: 
    #Login to the website. 
    response = s.post('https://play.horseandcountry.tv/login/', data=payload) 

    #Check if logged in successfully 
    soup = BeautifulSoup(response.text, 'lxml') 
    logged_in = soup.find('p', attrs={'class': 'navbar-text pull-right'}) 
    print s.cookies 
    print response.status_code 
    if logged_in.text.startswith('Logged in as'): 
     print 'Logged In Successfully!' 

आप इस के लिए स्पष्टीकरण की जरूरत है, तो आप इस answer जांच कर सकते हैं, या documentation