浏览器抓取网页不是一个简单的工作,必须要有网页的图片和视频
优采云 发布时间: 2022-07-12 16:00浏览器抓取网页不是一个简单的工作,必须要有网页的图片和视频
浏览器抓取网页不是一个简单的工作,涉及到代码和服务器的配合,我们通常用的浏览器网页抓取,抓取的是网页,而不是网页的图片,视频,和其他的内容。要想浏览器就可以抓取网页,必须要有网页的图片和视频。1,为什么必须是网页。如果是.http.server或者.http.proxy这类的网页,或者是java.util.links,或者是其他java平台上已经有的file.jar包,那么他就属于web应用,我们可以把这些web应用封装成jar包,把用户的图片或者视频封装成jar包,并封装到网页上即可。
那么java程序员就可以无视http协议,直接调用jar包里的api。如果你要做一个动态web程序,那么肯定需要写一个web容器,那么我们封装成jar包是不现实的,如果这个web容器完成不了,我们肯定不能封装进入,否则直接报错,因为使用web容器一方面要看开发人员的水平,一方面也要考虑跨平台的兼容性。
正是由于我们不考虑跨平台,如果不用网页,不用程序,那么我们就得去抓网页中的图片和视频。2,为什么需要分析网页首先http有get,post,put,patch,pattern这些方法,大家都可以去看一下。当有人封装一个web应用程序的时候,这些方法都能够帮你抓取到图片和视频,用的是不同的server。
有了这些方法,你完全可以不考虑浏览器,直接拿程序去连接请求网页,那么就不用操心服务器的问题,毕竟服务器是管理web应用程序的,不是浏览器。我们抓取图片或者视频,是要拿到图片和视频的jpg,bmp,mp4等格式文件,我们可以封装成jar包。这样我们就可以不需要手动解析js和css文件,解析出来的代码有很多,很容易出问题,并且直接写在web容器里。
当然,用原生方法解析java程序是不可能的,因为原生程序太复杂,需要处理的对象有上百个。所以,我们用的是webkit的signalhook技术,用webkit的signal去抓取。通过两个函数来控制hook来实现,1是javavoidmodels()voidredirect(protocol,request)2是javavoidapply(protocol,request)上面的函数都会被signalhook处理掉,那么在程序里就不能调用java的全局变量。
当apply对方法被调用的时候,就会出错,但是我们还能请求到图片或者视频,也不是没有办法,有两种方法。1,原生代码针对请求服务器方法,可以通过java.util.pairs.filelinksfor(xxx,xxx,xxx)来实现解析图片或者视频。有一个比较明显的缺点就是返回的是xml格式。2,可以通过java.util.viewfilesy。