2017-01-11 2 views
0

Ich versuche, einen Schaber für Cloudflare geschützter Website Cloudflare Schutz mit scrapy und scrapy_fake_useragentcfscrape python extension erstellen zu umgehen, um mit cfscrape, privoxy und tor und scrapy_fake_useragentTeile USER_AGENT zwischen scrapy_fake_useragent und cfscrape scrapy Erweiterung

Ich verwende injizieren zufällige reale USER_AGENT Informationen in die Header.

Wie in der cfscrape-Dokumentation angegeben: Sie müssen die gleiche User-Agent-Zeichenfolge verwenden, um Tokens zu erhalten und Anfragen mit diesen Tokens zu stellen, da Cloudflare Sie sonst als Bot kennzeichnet.

To collect cookie needed by `cfscrape`, i need to redefine the `start_request` function into my spider class, like this : 

    def start_requests(self): 
     cf_requests = [] 
     for url in self.start_urls: 
      token, agent = cfscrape.get_tokens(url) 
      self.logger.info("agent = %s", agent) 
      cf_requests.append(scrapy.Request(url=url, 
               cookies= token, 
               headers={'User-Agent': agent})) 
     return cf_requests 

Mein Problem ist, dass die von start_requests gesammelt user_agent nicht das gleiche ist, dass die user_agent zufällig durch scrapy_fake_useragent ausgewählt, wie Sie sehen können:

017-01-11 12:15:08 [airports] INFO: agent = Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:41.0) Gecko/20100101 Firefox/41.0 
2017-01-11 12:15:08 [scrapy.core.engine] INFO: Spider opened 
2017-01-11 12:15:08 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 
2017-01-11 12:15:08 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023 
2017-01-11 12:15:08 [scrapy_fake_useragent.middleware] DEBUG: Assign User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10 to Proxy http://127.0.0.1:8118 

I definiert meine Erweiterung in settings.py dieser Reihenfolge:

RANDOM_UA_PER_PROXY = True 
HTTPS_PROXY = 'http://127.0.0.1:8118' 
COOKIES_ENABLED = True 

DOWNLOADER_MIDDLEWARES = { 
    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None, 
    'scrapy_fake_useragent.middleware.RandomUserAgentMiddleware': 400, 
    'flight_project.middlewares.ProxyMiddleware': 100, 
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware':110, 
    } 

Ich brauche das gleiche user_agent, also wie ca n ich pass/bekomme den User-Agenten zufällig durch scrapy_fake_useragent in die start_requests-Methode für cfscrape Extension?

+0

Versuchen geben 'RandomUserAgentMiddleware' 50 Genehmigung –

Antwort

0

Endlich gefunden die Antwort mit Hilfe von scrapy_user_agent Entwickler. Desaktivieren die Linie 'scrapy_fake_useragent.middleware.RandomUserAgentMiddleware': 400 in settings.py dann diesen Quellcode schreiben:

class AirportsSpider(scrapy.Spider): 
    name = "airports" 
    start_urls = ['https://www.flightradar24.com/data/airports'] 
    allowed_domains = ['flightradar24.com'] 

    ua = UserAgent() 
    ... 

    def start_requests(self): 
     cf_requests = [] 
     user_agent = self.ua.random 
     self.logger.info("RANDOM user_agent = %s", user_agent) 
     for url in self.start_urls: 
      token , agent = cfscrape.get_tokens(url,user_agent) 
      self.logger.info("token = %s", token) 
      self.logger.info("agent = %s", agent) 

      cf_requests.append(scrapy.Request(url=url, 
              cookies= token, 
              headers={'User-Agent': agent})) 
     return cf_requests 
Verwandte Themen