python - स्क्रीन स्क्रेपिंग:"HTTP त्रुटि 403 के आसपास प्राप्त करना:robots.txt द्वारा अस्वीकृत अनुरोध"




screen-scraping beautifulsoup mechanize http-status-code-403 (8)

कुछ वास्तविक IE / FF उपयोगकर्ता-एजेंट से मेल करने के लिए अपना User-Agent शीर्ष लेख सेट करें।

यहाँ मेरा IE8 उपयोगकर्ता स्ट्रिंग है:

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; AskTB5.6)

निम्नलिखित के आसपास पाने का कोई तरीका है?

httperror_seek_wrapper: HTTP Error 403: request disallowed by robots.txt

साइट-स्वामी (barnesandnoble.com) से संपर्क करने का एकमात्र तरीका यह है कि .. मैं एक ऐसी साइट का निर्माण कर रहा हूं जो उन्हें अधिक बिक्री लाएगी, निश्चित नहीं कि वे एक निश्चित गहराई तक पहुंच से इनकार क्यों करेंगे।

मैं Python2.6 पर मैकेनाइज और ब्यूटीसाउप का उपयोग कर रहा हूं।

आस-पास के काम की उम्मीद करना


आपके द्वारा प्राप्त की जा रही त्रुटि उपयोगकर्ता एजेंट से संबंधित नहीं है। जब आप किसी साइट पर नेविगेट करने के लिए इसका उपयोग करते हैं, तो डिफ़ॉल्ट रूप से robots.txt निर्देशों को स्वचालित रूप से मशीनीकृत करें। इस व्यवहार को निष्क्रिय करने के लिए .ize_handle_robots (मिथ्या) मेकेनिज्म की विधि का उपयोग करें।


सही अनुरोध करने के लिए कोड:

br = mechanize.Browser()
br.set_handle_robots(False)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
resp = br.open(url)
print resp.info()  # headers
print resp.read()  # content

जैसा कि लगता है, आपको robots.txt को बायपास करने के लिए कम काम करना होगा, कम से कम यह लेख कहता है । इसलिए आपको फ़िल्टर को अनदेखा करने के लिए कुछ कोड निकालने पड़ सकते हैं।


इस की नैतिकता पर बहस किए बिना आप हेडर को संशोधित कर सकते हैं उदाहरण के लिए, Googlebot की तरह दिखने के लिए, या क्या googlebot भी अवरुद्ध है?


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

एक "तकनीकी" वर्कअराउंड जो अभी रोबोट्स में एन्कोडेड के रूप में उनकी नीतियों को तोड़ता है। यह एक उच्च-कानूनी-जोखिम दृष्टिकोण है जिसे मैं कभी भी अनुशंसित नहीं करूंगा। BTW, उनके robots.txt कैसे पढ़ता है?


मैकेनाइज्ड स्वचालित रूप से robots.txt का अनुसरण करता है, लेकिन यह माना जा सकता है कि आपके पास अनुमति है, या आपने नैतिकता के माध्यम से सोचा है।

अपने ब्राउज़र में एक ध्वज सेट करें:

browser.set_handle_equiv(False) 

यह robots.txt को अनदेखा करता है।

इसके अलावा, सुनिश्चित करें कि आप अपने अनुरोधों को समाप्त कर देते हैं, इसलिए आप उनकी साइट पर बहुत अधिक भार नहीं डालते हैं। (ध्यान दें, इससे यह भी कम संभावना है कि वे आपको पहचान लेंगे और प्रतिबंध लगा देंगे)।


TRUNCATE का उपयोग करते हुए PostgreSQL के लिए:

with contextlib.closing(engine.connect()) as con:
    trans = con.begin()
    con.execute('TRUNCATE {} RESTART IDENTITY;'.format(
        ','.join(table.name 
                 for table in reversed(Base.metadata.sorted_tables))))
    trans.commit()

नोट: RESTART IDENTITY; यह सुनिश्चित करता है कि सभी अनुक्रम भी रीसेट हो गए हैं। हालांकि, यह @ aknuds1 द्वारा DELETE नुस्खा की तुलना में 50% तक धीमा है।

एक और नुस्खा पहले सभी तालिकाओं को छोड़ना और फिर उन्हें फिर से बनाना है। यह अन्य 50% द्वारा धीमा है:

Base.metadata.drop_all(bind=engine)
Base.metadata.create_all(bind=engine)




python screen-scraping beautifulsoup mechanize http-status-code-403