내가 긁어 모으는 웹 사이트에는 쿠키를 설정하고 백엔드에서 j가 활성화되어 있는지 확인하는 javascript가 있습니다. html 코드에서 쿠키를 추출하는 것은 간단하지만 그 설정은 치료에서 문제가되는 것처럼 보입니다. 그래서 내 코드는 다음과 같습니다치료에 끈적 쿠키 설정
from scrapy.contrib.spiders.init import InitSpider
class TestSpider(InitSpider):
...
rules = (Rule(SgmlLinkExtractor(allow=('products/./index\.html',)), callback='parse_page'),)
def init_request(self):
return Request(url = self.init_url, callback=self.parse_js)
def parse_js(self, response):
match = re.search('setCookie\(\'(.+?)\',\s*?\'(.+?)\',', response.body, re.M)
if match:
cookie = match.group(1)
value = match.group(2)
else:
raise BaseException("Did not find the cookie", response.body)
return Request(url=self.test_page, callback=self.check_test_page, cookies={cookie:value})
def check_test_page(self, response):
if 'Welcome' in response.body:
self.initialized()
def parse_page(self, response):
scraping....
나는 내용이 check_test_page
에서 사용할 수 있음을 알 수는 쿠키가 완벽하게 작동합니다. 그러나 올바른 쿠키가없는 CrawlSpider에 링크가 표시되지 않으므로 parse_page
까지 도달 할 수 없습니다. 스크래핑 세션 기간 동안 쿠키를 설정하는 방법이 있습니까? 아니면 BaseSpider를 사용하고 모든 요청에 쿠키를 수동으로 추가해야합니까?
덜 바람직한 대안은 어떻게 든 스팸 구성 파일을 통해 쿠키를 변경하는 것입니다 (값은 변경되지 않는 것 같습니다). 그게 가능하니?
기본적으로 모든 쿠키가 전달됩니다. http://doc.scrapy.org/en/latest/ faq.html # does-scrapy-manage-cookies-automatically –
은 서버가 설정 한 쿠키입니다. 내가 볼 수있는 한 영구적 인 쿠키를 클라이언트에서 추가하는 방법은 없습니다 (치료). 따로 요청마다 완료해야합니다. – Leo