继上次通过phantomjs获取动态cookie后需要对同一网站搭建一个查询的接口,对于这种情况继续使用scrapy是肯定不现实的了,于是采用了urllib加上cookiejar的方式来进行实时查询接口的编写。
开始打算直接把动态生成的cookie直接带在header里面进行发送,但是由于本身传回cookie的存在,直接重写head会导致cookie不完整。于是采用在cookiejar中直接添加cookie字段,cookiejar的cookie添加十分繁琐,上代码
def getSession(e):
print 'getSession'
js = e.read()
js = str(js).replace("<script>", '')
js = js.replace("</script>", '')
js = js.replace("document.cookie=dc", 'console.log(dc);phantom.exit()')
f = open('getcookie.js', "w+")
f.write(js)
f.close()
status, output = commands.getstatusoutput('phantomjs getcookie.js')
cookiejar.set_cookie(make_cookie('__jsl_clearance', output.split(";")[0].split('=')[1]))
make_cookie函数的具体实现
def make_cookie(name, value):
return cookielib.Cookie(
version=0,
name=name,
value=value,
port=None,
port_specified=False,
domain="court.gov.cn",
domain_specified=True,
domain_initial_dot=False,
path="/",
path_specified=True,
secure=False,
expires=None,
discard=False,
comment=None,
comment_url=None,
rest=None
)
通过以上代码实现cookiejar的cookie的添加,直接通过字典添加cookie是不行的,cookiejar 中的cookie是以一个Cookie类型存在的,需要调用Cookie的构造函数生成的对应类型进行添加。
个人对于cookiejar不提供方便的添加cookie的方法表示非常不理解,不过管他呢,这里记一笔,以后注意