python动态获取cookie_scrapy爬虫使用Ghost.py动态获取cookie

本文介绍了在Scrapy爬虫中遇到521错误时,如何使用Ghost.py库模拟浏览器行为动态获取Cookie信息。通过安装Ghost.py,初始化类并保存cookies到文件,然后读取并解析Cookie,实现Scrapy爬虫中定时更新Cookie,确保爬取的正常进行。然而,Ghost.py依赖PySide或PyQt4,这在本地运行正常但可能在服务器上导致问题。
摘要由CSDN通过智能技术生成

前言

前段时间在用scrapy爬取某个网站时一直报521错误,在seeting.py里设置HTTPERROR_ALLOWED_CODES= [521]后会发现返回的response是一段加密的js代码。这段js代码是动态取得cookie信息的(但是只有一个value,故放弃了使用python库去执行js的打算),最后利用浏览器打开网页将其cookie手动添加到爬虫中会正常返回数据,最后找到了Ghost.py这个库去模拟浏览器打开网站行为并动态获取cookie信息的办法。

具体步骤

.安装Ghost.py

sudo pip install Ghost.py==0.1.2

返回最新的cookie

from ghost import Ghost

from scrapy import log

import re

class Cookieutil:

def __init__(self,url):

log.msg('init cookieutil class ,will be get %s cookie information!' %url, log.INFO)

gh = Ghost(download_images=False,display=False)

gh.open(url)

gh.open(url)

gh.save_cookies("cookie.txt")

gh.exit()

def getCookie(self):

cookie = ''

with open("cookie.txt") as f:

temp = f.readlines()

for index in temp:

cookie += self.parse_oneline(index).replace('\"','')

return cookie[:-1]

def parse_oneline(self,src):

oneline = ''

if re.search("Set-Cookie",src):

oneline = src.split(';')[0].split(':')[-1].strip()+';'

return oneline

scrapy的spider定时生成和调用cookie信息

这里只贴上主要的代码

headers={

'Cookie':'',

'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2',

}

headers['Cookie'] = Cookieutil('http://www.dmoz.org.cn/').getCookie()

def parse_page(self,response):

if int(time.time())-self.begin_time>3600:

print 'get a new cookie arrgment'

print self.headers['Cookie']

self.begin_time = int(time.time())

try:

self.headers['Cookie'] = Cookieutil('http://www.dmoz.org.cn/').getCookie()

except:

time.sleep(120)

self.headers['Cookie'] = Cookieutil('http://www.dmoz.org.cn/').getCookie()

结语

不过有个比较纠结的问题是Ghost.py需要依赖webkit,以致于在本地开发中能够正常运行,但是放到服务器中直接报错(Exception: Ghost.py requires PySide or PyQt4)。

目前为止还没找到好的解决办法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值