cfscrape
,
privoxy
와 토르를 사용 cloudfare 보호 된 웹 사이트에 대한 스크레이퍼를 만들려고 해요
및 scrapy_fake_useragent
공유 USER_AGENT
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
에 의해 무작위로 주어진 사용자 에이전트를 전달하거나 얻으려고합니까?
주는 시도를'50 권한을 RandomUserAgentMiddleware' –