• 因为要做爬虫,遇到很多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的过程

发表评论