Scrapy

2015-07-13 14 views
5

साथ सेलेनियम का घालमेल वहाँ किसी भी तरह से प्रभावी ढंग से यह पेज प्रतिपादन क्षमताओं के लिए Scrapy में सेलेनियम एकीकृत करने के लिए (क्रम स्क्रीनशॉट उत्पन्न करने के लिए) है?Scrapy

समाधान मैंने देखा है बस Scrapy के अनुरोध पहले से ही संसाधित के बाद WebDriver पर एक Scrapy अनुरोध/प्रतिक्रिया यूआरएल फेंक, और फिर का एक बहुत सिर्फ इतना है कि बंद काम करता है। यह कई अनुरोधों के रूप में दो बार बनाता है, कई मायनों में (साइटों लॉगिन, गतिशील या छद्म यादृच्छिक सामग्री, आदि के साथ साइटों की आवश्यकता होती है) में विफल रहता है, और कई एक्सटेंशन/मिडलवेयर अमान्य हो जाएगा।

वहाँ किसी भी "अच्छा" एक साथ काम करने के लिए दो होने का तरीका है? क्या मैं स्क्रैपिंग की सामग्री के स्क्रीनशॉट जेनरेट करने का एक बेहतर तरीका है?

उत्तर

3

उपयोग Scrapy के Downloader Middleware। एक साधारण उदाहरण के लिए एक और सवाल पर मेरा उत्तर देखें: https://stackoverflow.com/a/31186730/639806

+0

मैं इस पर ध्यान दिया है, और जबकि यह मुद्दों में से एक (अनुरोध पर दोहरीकरण) को ठीक करता है, यह Scrapy प्रदान करता है कई सुविधाओं को नजरअंदाज। यह उपयोगकर्ता-एजेंट विन्यास, प्रॉक्सी विन्यास, हेडर त्यागें, और कॉल के बीच शून्य हठ (कोई सत्र/कुकीज़) प्रदान करता है। इसके अलावा, सेलेनियम में POST अनुरोध सबमिट करना असंभव है, इसलिए FormRequests जैसी चीजें तोड़ेंगी या बहुत अप्रत्याशित परिणाम होंगे। – Rejected

+0

यह उन चीजों को बाईपास करता है। यह एक बहुत ही सरल उदाहरण है, लेकिन उन चीजों में से कई को सेलेनियम (जैसे कुकीज, हेडर और उपयोगकर्ता-एजेंट स्ट्रिंग) में डुप्लिकेट किया जा सकता है। असल में, उस जानकारी में से अधिकांश आप अनुरोध प्रक्रिया का उपयोग कर खींच सकते हैं जो 'process_request' विधि के लिए एक तर्क के रूप में उपलब्ध है। इसके अलावा, आपको सेलेनियम के माध्यम से पोस्ट करने की आवश्यकता नहीं होगी। सेलेनियम प्रतिक्रिया खींचने के बाद आप 'पार्स' में स्केपर के माध्यम से ऐसा नहीं कर सकते हैं। – JoeLinux

+0

क्या सेलेनियम डाउनलोडर मिडलवेयर द्वारा फॉर्मरेक्वेस्ट को 'अपहृत' नहीं किया जाएगा, और इसके बाद सेलेनियम द्वारा ड्राइवर.get (यूआरएल) के रूप में संसाधित किया जा सकता है? इसे कैसे रोका जा सकता है? – Rejected

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