美文网首页
2018-12-28

2018-12-28

作者: 绝尘牙 | 来源:发表于2018-12-28 22:05 被阅读0次

简单爬虫项目(二)

对数据资源使用ajax异步请求网站进行爬取的几种方式

  1. 请求分析
    详见ajax请求分析
  2. PhantomJS
    详见PhantomJS
  3. 拦截未加密请求
    browsermobproxy
    这个是一个用java写的代理库,用于抓取网络请求。
    对于这个库的使用,是我爬虫学习跑偏的开始。

请允许我阐述我跑偏后的心路历程
当我打开我所要爬取的网页的network,开始分析ajax请求时,我突然想到能不能直接拿到请求的url,而不是打开network分析完了ajax请求,再去构建参数体系,用于可持续化的爬取,为什么我不能用selenium操作完网页,直接获取这个请求,然后直接获取json数据。
有人会说phantomjs就可以直接获取ajax请求发送后json数据,我知道phantomjs可以,但是当时我一心只想拿到请求的url,我在使用了错误的百度姿势后,花了6、7个小时找到了这个库。(貌似phantomJS也能获取url。。OTL)
言归正传了
这是我对这个库的一个二次封装,很简单的封装

from browsermobproxy import Server 
class CusServer(object):
    """docstring for CusServer"""
    def __init__(self, serverPath):
        super(CusServer, self).__init__()
        self.serverPath = serverPath
        self.server = Server(serverPath)
        pass
    def createProxy(self):
        self.proxy = self.server.create_proxy()
        pass
    def setHarUrl(self,url):
        self.proxy.new_har(url)
        pass
    def startServer(self):
        self.server.start()
        pass
    def stopServer(self):
        self.server.stop()
        pass

使用这个库,安装这个库就不用说了,最重要的一点,你必须到他们的GitHub上面下载代理文件(见下图)

image.png
点进release就下载这个版本就行了 image.png
说实话,最近维护是在1年前,可能维护者也不是很关心它了
下载好了之后,在文件夹里面找到bin,里面有两个文件browsermob-proxybrowsermob-proxy.bat,一个是非windows系统下服务启动,一个是windows系统下服务启动。
然后就可以使用上面的二次封装的模块了,在创建类实例时,将服务启动的文件的文件路径作为参数传进初始化函数就行了
注意:网页加载过快可能导致它没有拦截到网络请求,此时刷新即可。
该代理配selenium,可以达到自动化爬取的效果
这种方法只适用于请求未加密的情况
这个时候就引进了我下一个问题
  1. 加密数据请求的破解
    当我想用第三个方法如法炮制,去爬取拉勾时,我发现拉勾的数据请求是进行了加密的,这就很尴尬了。
    这个时候就可以参考这个了:
    JavaScript加密逻辑分析与Python模拟执行实现数据爬取
    我这边等完全弄完了会上传完成的代码和个人理解

相关文章

网友评论

      本文标题:2018-12-28

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