2017-01-11 1 views
0
내가 cfscrape, privoxy와 토르를 사용 cloudfare 보호 된 웹 사이트에 대한 스크레이퍼를 만들려고 해요

scrapy_fake_useragent공유 USER_AGENT

내가 scrapy 및 scrapy_fake_useragent에와 cloudfare 보호를 우회 cfscrape python extension을 사용하고

임의의 실제 USER_AGENT 정보를 헤더에 삽입하십시오.

cfscrape 설명서에 표시된대로 : 토큰을 얻고 토큰을 요청할 때 동일한 사용자 에이전트 문자열을 사용해야합니다. 그렇지 않으면 Cloudflare가 사용자를 봇으로 신고합니다.

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 

내 문제는 당신이 볼 수있는 start_requests에 의해 수집 된 user_agent에서, user_agent 무작위 scrapy_fake_useragent에 의해 선택된 것과 동일한되지 않는 것입니다 :

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 

을 내가 settings.py 순서로 내 확장을 정의 :

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, 
    } 

나는 같은 user_agent이 필요합니다. n cfscrape 확장을위한 start_requests 방법으로 scrapy_fake_useragent에 의해 무작위로 주어진 사용자 에이전트를 전달하거나 얻으려고합니까?

+0

주는 시도를'50 권한을 RandomUserAgentMiddleware' –

답변

0

Finaly는 개발자 scrapy_user_agent의 도움으로 답변을 찾았습니다. settings.py에 선 'scrapy_fake_useragent.middleware.RandomUserAgentMiddleware': 400을 Desactivate하는 것은 다음이 소스 코드를 쓰기 :

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 
관련 문제