我抓取的網站有一個JavaScript,它設置一個cookie並在後端檢查它以確保js已啓用。從html代碼中提取cookie非常簡單,但是在scrapy中設置它似乎是一個問題。所以我的代碼是:在scrapy中設置粘性餅乾
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
可用,餅乾完美的作品。但它從來沒有得到parse_page
,因爲沒有正確的cookie的CrawlSpider沒有看到任何鏈接。有沒有一種方法可以在拼音會話期間設置cookie?或者我必須使用BaseSpider並手動將cookie添加到每個請求?
不太可取的替代方法是通過scrapy配置文件以某種方式設置cookie(該值似乎永不改變)。那可能嗎?
Scrapy默認傳遞所有cookies:http://doc.scrapy.org/en/latest/ faq.html#do-scrapy-manage-cookies-automatically – 2012-08-15 17:51:25
這就是服務器設置的cookie。據我所見,無法從客戶端添加永久cookie(scrapy)。必須單獨完成每個請求 – Leo 2012-08-16 09:55:35