2015-10-16 9 views
16
def download_torrent(url): 
    fname = os.getcwd() + '/' + url.split('title=')[-1] + '.torrent' 
    try: 
     schema = ('http:') 
     r = requests.get(schema + url, stream=True) 
     with open(fname, 'wb') as f: 
      for chunk in r.iter_content(chunk_size=1024): 
       if chunk: 
        f.write(chunk) 
        f.flush() 
    except requests.exceptions.RequestException as e: 
     print('\n' + OutColors.LR + str(e)) 
     sys.exit(1) 

    return fname 

कोड की है कि ब्लॉक में जब मैं पूरी स्क्रिप्ट चलाने मैं एक त्रुटि हो रही है। जब मैं वास्तव में धार डाउनलोड करने के लिए जाओ, मैं मिलता है:अजगर अनुरोध ('कनेक्शन निरस्त किया गया।', BadStatusLine (" ''",)) हो रही त्रुटि

('Connection aborted.', BadStatusLine("''",)) 

मैं केवल कोड के ब्लॉक मुझे लगता है कि इसके बाद के संस्करण प्रासंगिक है तैनात। पूरी लिपि नीचे है। यह पेंटट्स से है, लेकिन मुझे नहीं लगता कि यह अब तक बनाए रखा है, और मैं इसे पायथन 3 के साथ चलाने की कोशिश कर रहा हूं। मेरे शोध से, त्रुटि का अर्थ हो सकता है कि मैं https के बजाय http का उपयोग कर रहा हूं, लेकिन मैंने दोनों को आजमाया है।

Original script

+0

क्या आप ऐसा नमूना यूआरएल प्रदान कर सकते हैं जहां यह होता है? – TobiMarg

+0

आपके द्वारा चिपकाए गए कोड में 'try' गुम है। मुझे एक अलग त्रुटि मिल रही है: '(' कनेक्शन निरस्त। ', रिमोट डिस्क्लेक्टेड (' प्रतिक्रिया के बिना रिमोट एंड बंद कनेक्शन '))' आशा है कि एक और वर्णनात्मक त्रुटि आपको मदद करेगी। – sorbet

+0

हम्म। चलने पर स्क्रिप्ट मुझे यूआरएल सिर्फ धार का नाम नहीं देती है, इसलिए मैं एक नमूना यूआरएल पोस्ट नहीं कर सकता। मैंने अभी पाइथन सीखने की खोज की और पहले धार का चयन किया। मुझे यकीन नहीं है कि कोशिश करने से आपको क्या मतलब है। क्या आप विस्तार से समझा सकते हैं? आपकी सहायता के लिए धन्यवाद. – eurabilis

उत्तर

28

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

यदि आप एक परीक्षण वेबसाइट से इस यूआरएल के साथ अपने requests कोड को आजमाते हैं: http://mirror.internode.on.net/pub/test/5meg.test1, आप देखेंगे कि यह सामान्य रूप से डाउनलोड होता है।

इसके आसपास पाने के लिए, अपने user agent नकली करें। आपका उपयोगकर्ता एजेंट आपके वेब ब्राउज़र की पहचान करता है, और वेबहोस्ट आमतौर पर बॉट का पता लगाने के लिए जांचते हैं।

अपने उपयोगकर्ता एजेंट को सेट करने के लिए headers फ़ील्ड का उपयोग करें। यहां एक उदाहरण दिया गया है जो वेबहोस्ट को फ़ायरफ़ॉक्स बताता है।

headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0' } 
r = requests.get(url, headers=headers) 

वहाँ वेब के लिए अन्य तरीकों का एक बहुत है बॉट पता लगाने के लिए होस्ट करता है, लेकिन उपयोगकर्ता एजेंट का सबसे आसान और सामान्य चेकों से एक है। यदि आप अपने स्क्रैपर को पहचानना कठिन बनाना चाहते हैं, तो आप ghost.py आज़मा सकते हैं।

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