资讯专栏INFORMATION COLUMN

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

xushaojieaaa / 611人阅读

前言

前段时间在用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)。
目前为止还没找到好的解决办法

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38166.html

相关文章

  • scrapy提升篇之配置

    摘要:提升篇之配置增加并发并发是指同时处理的的数量。其有全局限制和局部每个网站的限制。使用级别来报告这些信息。在进行通用爬取时并不需要,搜索引擎则忽略。禁止能减少使用率及爬虫在内存中记录的踪迹,提高性能。 scrapy提升篇之配置 增加并发 并发是指同时处理的request的数量。其有全局限制和局部(每个网站)的限制。Scrapy默认的全局并发限制对同时爬取大量网站的情况并不适用,因此您需要...

    刘永祥 评论0 收藏0
  • 12、web爬虫讲解2—Scrapy框架爬虫Scrapy模拟浏览器登录—获取Scrapy框架Coo

    摘要:百度云搜索,搜各种资料搜网盘,搜各种资料模拟浏览器登录方法,可以返回一个请求给爬虫的起始网站,这个返回的请求相当于,返回的请求会替代里的请求请求,可以设置,回调函数表单提交,第一个必须参数,上一次响应的对象,其他参数,表单内容等可以将一个新 【百度云搜索,搜各种资料:http://www.bdyss.cn】 【搜网盘,搜各种资料:http://www.swpan.cn】 模拟浏览器登录...

    jay_tian 评论0 收藏0
  • 首次公开,整理12年积累的博客收藏夹,零距离展示《收藏夹吃灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0
  • Python入门网络爬虫之精华版

    摘要:学习网络爬虫主要分个大的版块抓取,分析,存储另外,比较常用的爬虫框架,这里最后也详细介绍一下。网络爬虫要做的,简单来说,就是实现浏览器的功能。 Python学习网络爬虫主要分3个大的版块:抓取,分析,存储 另外,比较常用的爬虫框架Scrapy,这里最后也详细介绍一下。 首先列举一下本人总结的相关文章,这些覆盖了入门网络爬虫需要的基本概念和技巧:宁哥的小站-网络爬虫,当我们在浏览器中输入...

    Bmob 评论0 收藏0
  • 【Sasila】一个简单易用的爬虫框架

    摘要:所以我模仿这些爬虫框架的优势,以尽量简单的原则,搭配实际上是开发了这套轻量级爬虫框架。将下载器,解析器,调度器,数据处理器注入核心成为对象。提供对爬虫进行管理监控。每个脚本被认为是一个,确定一个任务。   现在有很多爬虫框架,比如scrapy、webmagic、pyspider都可以在爬虫工作中使用,也可以直接通过requests+beautifulsoup来写一些个性化的小型爬虫脚本...

    yacheng 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<