Scrapy中使用cookie免于驗(yàn)證登錄和模擬登錄
引言
python
爬蟲我認(rèn)為最困難的問題一個(gè)是ip代理耘斩,另外一個(gè)就是模擬登錄了管行,更操蛋的就是模擬登錄了之后還有驗(yàn)證碼业舍,真的是不讓人省心赎懦,不過既然有了反爬蟲起胰,那么就有反反爬蟲的策略久又,這里就先介紹一個(gè)cookie模擬登陸,后續(xù)還有seleminum+phantomjs
模擬瀏覽器登錄的文章效五。還不知道cookie是什么朋友們地消,可以點(diǎn)擊這里cookie提取方法:
打開谷歌瀏覽器或者火狐瀏覽器,如果是谷歌瀏覽器的按
F12
這個(gè)鍵就會(huì)跳出來瀏覽器控制臺(tái)畏妖,然后點(diǎn)擊Network
犯建,之后就是刷新網(wǎng)頁開始抓包了,之后在抓到的頁面中隨便打開一個(gè)瓜客,就能看到cokie了适瓦,但是這里的cookie并不符合python中的格式,因此需要轉(zhuǎn)換格式谱仪,下面提供了轉(zhuǎn)換的代碼
# -*- coding: utf-8 -*-
class transCookie:
def __init__(self, cookie):
self.cookie = cookie
def stringToDict(self):
'''
將從瀏覽器上Copy來的cookie字符串轉(zhuǎn)化為Scrapy能使用的Dict
:return:
'''
itemDict = {}
items = self.cookie.split(';')
for item in items:
key = item.split('=')[0].replace(' ', '')
value = item.split('=')[1]
itemDict[key] = value
return itemDict
if __name__ == "__main__":
cookie = "你復(fù)制的cookie"
trans = transCookie(cookie)
print trans.stringToDict()
補(bǔ)充說明:
只需要將你網(wǎng)頁上的cookie復(fù)制到上述代碼中直接運(yùn)行就可以了
使用cookie操作scrapy
直接擼代碼
# -*- coding: utf-8 -*-
import scrapy
from scrapy.conf import settings #從settings文件中導(dǎo)入Cookie玻熙,這里也可以室友from scrapy.conf import settings.COOKIE
class DemoSpider(scrapy.Spider):
name = "demo"
#allowed_domains = ["csdn.com"]
start_urls = ["http://write.blog.csdn.net/postlist"]
cookie = settings['COOKIE'] # 帶著Cookie向網(wǎng)頁發(fā)請(qǐng)求\
headers = {
'Connection': 'keep - alive', # 保持鏈接狀態(tài)
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36'
}
def start_requests(self):
yield scrapy.Request(url=self.start_urls[0],headers=self.headers,cookies=self.cookie)# 這里帶著cookie發(fā)出請(qǐng)求
def parse(self, response):
print response.body
說明
這里是scrapy工程目錄下spiders目錄下的主要的解析網(wǎng)頁的py文件相信學(xué)過scrapy的應(yīng)該不會(huì)陌生,上述代碼中的cookie值是放在Settings文件中的疯攒,因此使用的時(shí)候需要導(dǎo)入嗦随,當(dāng)然你也可以直接將cookie粘貼到這個(gè)文件中
注意
雖說這里使用直接使用cookie可以省去很多麻煩,但是cookie的生命周期特別的短,不過小型的項(xiàng)目足夠使用了枚尼,向那些需要爬兩三天甚至幾個(gè)月的項(xiàng)目就不適用了贴浙,因此在隔一段時(shí)間就要重新?lián)Qcookie的值,雖說有很多麻煩署恍,但是我還是比較喜歡這種方法的崎溃,因?yàn)榭梢允∪ゲ簧倌X筋
作者說
本人秉著方便他人的想法才開始寫技術(shù)文章的,因?yàn)閷?duì)于自學(xué)的人來說想要找到系統(tǒng)的學(xué)習(xí)教程很困難盯质,這一點(diǎn)我深有體會(huì)袁串,我也是在不斷的摸索中才小有所成,如果你們覺得我寫的不錯(cuò)就幫我推廣一下呼巷,讓更多的人看到囱修。另外如果有什么錯(cuò)誤的地方也要及時(shí)聯(lián)系我,方便我改進(jìn)王悍,謝謝大家對(duì)我的支持破镰。
最后歡迎大家看看我的其他scrapy文章