2012-10-25 28 views
7

को सेट करने के लिए कैसे करें, मुझे साइट को स्क्रैप करने से पहले रेफरर यूआरएल सेट करने की आवश्यकता है, साइट यूआरएल आधारित प्रमाणीकरण को रेफरिंग का उपयोग करती है, इसलिए अगर रेफरर मान्य नहीं है तो यह मुझे लॉगिन करने की अनुमति नहीं देता है।स्कैपर रेफरर यूआरएल

क्या कोई बता सकता है कि यह स्केपर में कैसे करें?

उत्तर

11

आप अपनी मकड़ी के अनुरोध में संदर्भित बदलना चाहते हैं, तो आप settings.py फ़ाइल में DEFAULT_REQUEST_HEADERS बदल सकते हैं

उदाहरण:

DEFAULT_REQUEST_HEADERS = { 'Referer': 'http://www.google.com'
}

3

अनुरोध हेडर

में बस सेट संदर्भ Url

class scrapy.http.Request(url[, method='GET', body, headers, ...

headers (dict) – the headers of this request. The dict values can be strings (for single valued headers) or lists (for multi-valued headers).

उदाहरण:

return Request(url=your_url, headers={'Referer':'http://your_referer_url'})

6

आप वास्तव में क्या करना चाहिए के रूप में @warwaruk संकेत दिया, नीचे एक क्रॉल मकड़ी के लिए मेरे उदाहरण विस्तार है:

from scrapy.contrib.spiders import CrawlSpider 
from scrapy.http import Request 

class MySpider(CrawlSpider): 
    name = "myspider" 
    allowed_domains = ["example.com"] 
    start_urls = [ 
     'http://example.com/foo' 
     'http://example.com/bar' 
     'http://example.com/baz' 
     ] 
    rules = [(...)] 

    def start_requests(self): 
    requests = [] 
    for item in start_urls: 
     requests.append(Request(url=item, headers={'Referer':'http://www.example.com/'})) 
    return requests  

    def parse_me(self, response): 
    (...) 

यह निम्न लॉग उत्पन्न करनी चाहिए आपके टर्मिनल में:

(...) 
[myspider] DEBUG: Crawled (200) <GET http://example.com/foo> (referer: http://www.example.com/) 
(...) 
[myspider] DEBUG: Crawled (200) <GET http://example.com/bar> (referer: http://www.example.com/) 
(...) 
[myspider] DEBUG: Crawled (200) <GET http://example.com/baz> (referer: http://www.example.com/) 
(...) 

बेसस्पीडर के साथ समान कार्य करेगा। अंत में start_requests विधि बेसस्पीडर विधि है, जिससे क्रॉलस्पीडर से विरासत प्राप्त होती है। कुकीज़, कॉलबैक फ़ंक्शन, अनुरोध की प्राथमिकता आदि

:

Documentation जैसे और अधिक विकल्प अलग हेडर से अनुरोध में स्थापित किया जाना बताते हैं,