美文网首页我爱编程
记录 ghost.py 设置proxy的过程

记录 ghost.py 设置proxy的过程

作者: 腿长袖子短 | 来源:发表于2018-02-05 16:28 被阅读126次
    • 因为要做爬虫,遇到很多js动态解析的页面,但是scrapy无法提取js动态加载的数据,在使用了 selenium + phantomJS 之后解决了这个问题,同时也写好了请求中间件,以为到此这种问题就算完美解决了, BUT......在一次偶然的情况之下,我本地开着SSR代理软件在谷歌上查资料,忘记关闭SSR了,然后运行爬虫时就报错了,经过各种测试拍错,发现问题就出在使用了SSR代理上,得出结论 phantomjs 和本地的SSR client冲突,至于原因,研究了两天没搞明白,在Stack Overflow上提问了,到现在没人回我,也尝试了各种phantomjs设置代理的办法甚至更换了webdrive,但是依然无法解决爬虫报错的问题,今天看到有人推荐ghost.py,抱着试一试的态度尝试,结果竟然ok了,好激动,上边是情景,下边是过程:

    • 下载安装

      • 环境说明:
        win10 + python3.6
      • 依赖
        1.官网明确说明:ghost.py requires either PySide (preferred) or PyQt Qt bindings:
        ghost.py需要PySide或者PyQt依赖,所以首先下载这两个其中任意一个(个人推荐PyQt4) ,PySide好像又需要一个什么别的依赖,而且好像在python3的环境下报错,反正有报错,具体情况到写文章的时候忘记了,所以推荐PyQt4
        2.安装 ghost.py
        pip install ghost.py
        安装完成后就可以用了
    • 使用

    这是一个自己测试用的python文件,这个url需要FQ才能使用,所以用到了SSR Client

    from ghost import Ghost,Session
    url = 'https://doub.io/dbrj-4/'
    g = Ghost()
    se = Session(g, display=False, wait_timeout=60)
    se.set_proxy(type_='https', host='127.0.0.1', port=1083)
    se.open(url)
    data = se.content
    with open('doub_2.html', 'wb+') as f:
        content = data.encode('UTF-8')
        f.write(content)
        f.close()
    print('---done---')
    g.exit()
    

    然而尝试之后html文件里边没有获取到任何内容,一番排查之后发现了问题,将se.set(type_='http')改为se.set(type_='https'),再次测试.ok,html文件里边有了完整的源码
    所以在ghost中设置代理时需要根据目标的url来设置type_http/https(一般咱们做爬虫发送get请求也就这两个了)
    至此,在不懈的努力之下终于又解决了使用代理后爬虫无法使用phantomjs解析动态页面的问题,遇到各种反爬措施的站也有更好的应对策略了,妈妈再也不用担心我崩溃了,-!!!

    相关文章

      网友评论

        本文标题:记录 ghost.py 设置proxy的过程

        本文链接:https://www.haomeiwen.com/subject/oocizxtx.html