2015-10-20 9 views
7

मैं उत्पाद की कीमतों की जानकारी प्राप्त करने के लिए कभी-कभी ई-कॉमर्स वेबपृष्ठ को स्क्रैप करता था। मैंने थोड़ी देर में स्कैचर का उपयोग करके बनाए गए स्क्रैपर का उपयोग नहीं किया है और कल इसका उपयोग करने की कोशिश कर रहा था - मैं बॉट सुरक्षा के साथ एक समस्या में भाग लेता हूं।स्केपर में क्लाउडफ्लेयर बॉट/डीडीओएस सुरक्षा को कैसे बाईपास करें?

यह क्लाउडफ्लेयर की डीडीओएस सुरक्षा का उपयोग कर रहा है जो मूल रूप से जेएस अक्षम के साथ ब्राउज़र (और इसलिए स्क्रैपर्स) को फ़िल्टर करने के लिए जावास्क्रिप्ट मूल्यांकन का उपयोग कर रहा है। एक बार समारोह का मूल्यांकन हो जाने के बाद, गणना संख्या के साथ प्रतिक्रिया उत्पन्न होती है। बदले में, सेवा दो प्रमाणीकरण कुकीज़ भेजती है जो प्रत्येक अनुरोध से जुड़ी होती हैं जो आम तौर पर साइट को क्रॉल करने की अनुमति देती हैं। Here का विवरण यह कैसे काम करता है।

मुझे cloudflare-scrape पायथन मॉड्यूल भी मिला है जो संख्या की गणना करने के लिए बाहरी जेएस मूल्यांकन इंजन का उपयोग करता है और अनुरोध को सर्वर पर वापस भेजता है। मुझे यकीन नहीं है कि इसे Scrapy में एकीकृत कैसे करें। या शायद जेएस निष्पादन का उपयोग किए बिना एक बेहतर तरीका है? अंत में, यह एक रूप है ...

मैं किसी भी मदद की सराहना करता हूं।

+0

जेएस निष्पादित करने में क्या गलत है? इसके बिना बहुत सारी सामग्री तक नहीं पहुंचा जा सकता है ... – dandavis

+0

@ डांडविस स्केपर जेएस निष्पादन नहीं करता है। जेएस के बिना – Rejected

+0

, स्क्रैपिंग हर समय अधिक बेकार हो रही है। आपको स्क्रैप करने के लिए ब्राउज़र का उपयोग करने पर विचार करना चाहिए। मेरी स्क्रैप स्क्रिप्ट लॉग इन के पीछे हो सकती हैं, गतिशील और पेजिनेटेड सामग्री को पकड़ सकती हैं, यहां तक ​​कि स्क्रैपिंग से पहले अधिक गतिशील उप-सामग्री का अनुरोध करने के लिए नकली-क्लिक भी करें, और मुझे नहीं लगता कि कोई भी कोड की 10 से अधिक पंक्तियां हैं या एक बड़ी बाहरी पुस्तकालय की आवश्यकता है। आपको केवल tampermonkey और एक डाउनलोड दिनचर्या है ... KISS। यदि आप इसे अधिक स्वचालित चाहते हैं, तो आप उपयोगकर्ता को phantomJS या उस तरह कुछ पर स्विच कर सकते हैं। जेएस निष्पादित करने के लिए – dandavis

उत्तर

4

इसलिए मैंने cloudflare-scrape की सहायता से पायथन का उपयोग करके जावास्क्रिप्ट निष्पादित किया।

def start_requests(self): 
    cf_requests = [] 
    for url in self.start_urls: 
     token, agent = cfscrape.get_tokens(url, 'Your prefarable user agent, _optional_') 
     cf_requests.append(Request(url=url, 
         cookies={'__cfduid': token['__cfduid']}, 
         headers={'User-Agent': agent})) 
    return cf_requests 

पार्स कार्यों के साथ-साथ:

अपने स्क्रेपर लिए, आप निम्न कोड जोड़ने की जरूरत। और बस!

बेशक, आपको क्लाउडफ्लेयर-स्क्रैप को पहले स्थापित करना होगा और इसे अपने मकड़ी पर आयात करना होगा। आपको एक जेएस निष्पादन इंजन स्थापित करने की भी आवश्यकता है। मेरे पास नोड था। जेएस पहले से ही कोई शिकायत नहीं थी।

+0

हाय, मैंने क्लाउडफ्लेयर का उपयोग कर वेबसाइट के लिए अपने समाधान का उपयोग करने का प्रयास किया - ऐसा लगता है कि सही अनुरोध भेजा जा रहा है, लेकिन मैं अभी भी पहले अनुरोध से 503 त्रुटियों के साथ समय निकाल रहा हूं। 'डीबग: यहाँ reuqests की तरह लग रही है" मिल/cdn-cgi/एल/chk_jschl jschl_answer = 386 और jschl_vc = 3ee197400dbcca30577bcb3949cf781f & = १४४६६९४३४६ पारित?।755-esyN0f4s4% 2F HTTP/1.1 "302 165 DEBUG:" GET /forumdisplay.php?29-DotA-Chat HTTP/1.1 "200 21367' ' 2015-11-04 22:32:48 [स्केपर] डेबग: पुनः प्रयास करें (असफल 3 बार): 503 सेवा अनुपलब्ध ' – ddnm

+0

@ddnm, मैंने कोड अपडेट किया। यह अब काम करेगा। 'कुकीज़ = {"cfuid" बदलें: टोकन ["cfuid"]} '' कुकीज = टोकन' –

1

स्पष्ट रूप से ऐसा करने का सबसे अच्छा तरीका क्लाउडफ्लारे में आपके आईपी को श्वेतसूची में रखना होगा; यदि यह उपयुक्त नहीं है तो मुझे cloudflare-scrape लाइब्रेरी की अनुशंसा करें। आप कुकी टोकन प्राप्त करने के लिए इसका उपयोग कर सकते हैं, फिर सर्वर पर वापस अपने Scrapy request में इस कुकी टोकन प्रदान करें।

2

स्क्रैपिंग प्रक्रिया के दौरान थोड़ी सी गति से समझौता करना ठीक है, तो आप ब्राउज़र के साथ वास्तविक उपयोगकर्ता इंटरैक्शन को अनुकरण करने के लिए सेलेनियम के साथ स्केरेपी को जोड़ सकते हैं। मैंने यहां इसके बारे में एक संक्षिप्त ट्यूटोरियल लिखा: http://www.6020peaks.com/2014/12/how-to-scrape-hidden-web-data-with-python

यह क्लाउडफ्लेयर के साथ आपकी विशिष्ट समस्या को लक्षित नहीं करता है, लेकिन इससे कुछ मदद मिल सकती है क्योंकि कुछ जेएस निष्पादन की आवश्यकता वाले डेटा को लोड करते समय मुझे समान समस्याएं थीं।

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