简单爬虫项目(二)
对数据资源使用ajax异步请求网站进行爬取的几种方式
- 请求分析
详见ajax请求分析 - PhantomJS
详见PhantomJS - 拦截未加密请求
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上面下载代理文件(见下图)

点进release就下载这个版本就行了

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