-
因为要做爬虫,遇到很多js动态解析的页面,但是scrapy无法提取js动态加载的数据,在使用了
selenium + phantomJS
之后解决了这个问题,同时也写好了请求中间件,以为到此这种问题就算完美解决了, BUT......在一次偶然的情况之下,我本地开着SSR代理软件在谷歌上查资料,忘记关闭SSR了,然后运行爬虫时就报错了,经过各种测试拍错,发现问题就出在使用了SSR代理上,得出结论 phantomjs 和本地的SSR client冲突,至于原因,研究了两天没搞明白,在Stack Overflow上提问了,到现在没人回我,也尝试了各种phantomjs设置代理的办法甚至更换了webdrive,但是依然无法解决爬虫报错的问题,今天看到有人推荐ghost.py,抱着试一试的态度尝试,结果竟然ok了,好激动,上边是情景,下边是过程: -
下载安装
-
使用
这是一个自己测试用的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解析动态页面的问题,遇到各种反爬措施的站也有更好的应对策略了,妈妈再也不用担心我崩溃了,-!!!
网友评论