2012-10-25 4 views
7

Muszę ustawić adres URL odsyłacza, przed skrobaniem witryny, witryna korzysta z uwierzytelniania opartego na adresie URL, więc nie pozwala mi się zalogować, jeśli referer nie jest prawidłowy.scrapy, jak ustawić adres URL referer

Czy ktoś może powiedzieć, jak to zrobić w Scrapy?

Odpowiedz

11

Jeśli chcesz zmienić odsyłający we wniosku pająka, można zmienić DEFAULT_REQUEST_HEADERS w pliku settings.py

Przykład:

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

3

Wystarczy ustawić URL odsyłający w nagłówku żądania

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).

Przykład:

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

6

należy zrobić dokładnie tak, jak @warwaruk wskazane poniżej jest mój przykład opracowanie dla indeksowania pająk:

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): 
    (...) 

To powinno generować następujące dzienniki w terminalu:

(...) 
[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/) 
(...) 

Działa to samo z BaseSpider. W metodzie start_requests znajduje się metoda BaseSpider, z której wywodzi się CrawlSpider.

Documentation wyjaśnia więcej opcji być określone w specyfikacji Request oprócz nagłówków takich jak: ciasteczka, funkcję oddzwonienia, priorytet wniosek itd