2013-05-06 46 views
5

मैं स्क्रैप का उपयोग कर एक वेबसाइट स्क्रैप कर रहा हूं जिसके लिए खाना पकाने और जावा-स्क्रिप्ट सक्षम होना आवश्यक है। मुझे नहीं लगता कि मुझे वास्तव में जावास्क्रिप्ट को संसाधित करना होगा। मुझे बस इतना करना है कि जावास्क्रिप्ट सक्षम है या नहीं।स्प्रैयर में सक्षम जावास्क्रिप्ट और कुकीज़ कैसे भेजें?

यहाँ मैं क्या करने की कोशिश की है: 1) सेटिंग्स

COOKIES_ENABLED = True 
COOKIES_DEBUG = True 

2) कुकीज़

DOWNLOADER_MIDDLEWARES = { 
    'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': 400, 
    'scrapy.contrib.downloadermiddleware.cookies.CookiesMiddleware':700 
} 

3) भेजा जा रहा है 'के लिए डाउनलोड मिडलवेयर का उपयोग में निम्नलिखित के माध्यम से कुकीज़ सक्षम एक्स JavaScript- अक्षम ':' ट्रू '

DEFAULT_REQUEST_HEADERS={ 
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
    'Accept-Language': 'en', 
    'X-JAVASCRIPT-ENABLED': 'True' 
} 

लेकिन उनमें से कोई भी मेरे साथ काम नहीं कर रहा है। क्या आप कृपया कोई विचार सुझा सकते हैं या मुझे कुछ दिशा दे सकते हैं?

आपके उत्तरों के लिए अग्रिम धन्यवाद।

उत्तर

1

स्क्रैप जावा स्क्रिप्ट का समर्थन नहीं करता है।

लेकिन

आप Scrapy के साथ कुछ अन्य पुस्तकालय जे एस को क्रियान्वित करने, वेबकिट, सेलेनियम आदि के लिए उपयोग कर सकते हैं

और तुम क्या कुकीज़ (COOKIES_ENABLED = True) सक्षम करने के लिए नहीं की जरूरत है, यहां तक ​​कि DOWNLOADER_MIDDLEWARES जोड़ने के लिए आवश्यक नहीं आपके settings.py में क्योंकि वे पहले से ही default scrapy settings

+0

अख्तर, उत्तर के लिए धन्यवाद। जैसा कि मैंने कहा, मुझे जावास्क्रिप्ट को संसाधित करने की आवश्यकता नहीं होगी। सर्वर मुझे वास्तविक पृष्ठ नहीं देगा यदि यह बीजिंग जावास्क्रिप्ट अनुरोध स्रोत पर सक्षम नहीं है। मुझे बस सर्वर पर एक सिग्नल भेजने की आवश्यकता है कि जावास्क्रिप्ट और कुकीज़ सक्षम हैं। –

4

AFAIK में उपलब्ध हैं, कोई सार्वभौमिक समाधान नहीं है। आपको साइट को डीबग करना होगा, यह देखने के लिए कि यह कैसे निर्धारित करता है कि जावास्क्रिप्ट आपके क्लाइंट द्वारा समर्थित/सक्षम नहीं है।

मुझे नहीं लगता कि सर्वर X-JAVASCRIPT-ENABLED शीर्षलेख देखता है। हो सकता है कि पृष्ठ जावास्क्रिप्ट द्वारा सेट किया गया हो जब पृष्ठ वास्तविक जावास्क्रिप्ट सक्षम ब्राउज़र में लोड हो? शायद सर्वर user-agent हेडर देखता है?

this response भी देखें।

+0

ठीक है, हाँ ... यह मेरे लिए काम करने के लिए एक अच्छी दिशा हो सकती है ... –

4

आपको जेएस इंजन scrapyjs के साथ प्रयास करना चाहिए। यहाँ कैसे इसे अपने मकड़ी परियोजना में स्थापित करने के लिए की एक उदाहरण है:

SPLASH_URL = 'http://192.168.59.103:8050' 
DOWNLOADER_MIDDLEWARES = { 
    'scrapyjs.SplashMiddleware': 725, 
} 

Scraping hub जो Scrapy के पीछे एक ही कंपनी है, छप सक्षम के साथ अपने मकड़ियों को चलाने के लिए special instances है।

तो इस तरह से अपनी मकड़ी में SplashRequest बजाय Request उपज:

import scrapy 
from scrapy_splash import SplashRequest 

class MySpider(scrapy.Spider): 
    start_urls = ["http://example.com", "http://example.com/foo"] 

    def start_requests(self): 
     for url in self.start_urls: 
      yield SplashRequest(url, self.parse, 
       endpoint='render.html', 
       args={'wait': 0.5}, 
      ) 

    def parse(self, response): 
     # response.body is a result of render.html call; it 
     # contains HTML processed by a browser. 
     # … 
संबंधित मुद्दे