Teleport Ultra抓取不到登陆后的页面

最近接了一个将一个快下线的网站的所有内容都下载下来并离线能正常使用的需求。

最开始是用 Teleport Ultra 来爬的,但是登陆后的内容总是爬不下来,在看了该网站的登陆机制后,觉得可能的原因是:

登陆成功后网站不是响应一个页面出来,而是响应的302状态码,响应的内容是空的。然后前端会再去访问后端,这样响应出来的网页就是登陆后的网页。Teleport Ultra 可能是不支持这样的机制吧。我自己改了前端的登陆界面,绑定了用户名和密码,并将登陆函数设置成加载就执行,再去让Teleport Ultra请求还是不行。最后我只能自己写程序来爬网站了。还有可能是这个登陆是用表单来提交数据的,不知道和这个有没有关系。

*********************************************

欢迎大家来讨论下载不了的原因

**********************************************

java下载网页到本地的程序如下:

public static void main(String []args){
        String url = "http://www.pat.aero/gro/users/login";
        HttpPost httpPost = new HttpPost(url);
        String json = "data[User][username]=XXX&data[User][password]=XXX";
        httpPost.addHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");
        httpPost.setHeader("Accept", "application/json");
        // 构建消息实体
        StringEntity entity = new StringEntity(json, Charset.forName("UTF-8"));
        entity.setContentEncoding("UTF-8");
        // 发送Json格式的数据请求
        entity.setContentType("application/json");
        httpPost.setEntity(entity);
        try {
            HttpResponse response=client.execute(httpPost);
            String getUrl = "http://www.pat.aero/gro/main/";
            // 紧接着发送一个get请求
            HttpGet httpGet = new HttpGet(getUrl);
            HttpResponse execute = client.execute(httpGet);
            String startStr = EntityUtils.toString(execute.getEntity(), "utf-8");
            genFile(startStr,"start.html");
            splitDownloadFile(startStr);
        } catch (Exception e) {
            logger.error("主函数捕获异常:{}",e.getMessage());
        }
    }

注:

1、上面的代码只展示了如何去下载一个网页的功能,要是想爬全站的话,还需要把页面中的链接全部分离出来,再去一个个的请求,我实际上采用的深度优先遍历,并剪枝来下载的。剪枝其实就是设置一个set保存所有已经下载过得页面,再根据分离出来的地址去访问的时候先去访问set,如果没有再去请求。

2、对网页中的链接地址也需要遍历去修改,对于js函数,直接去修改下载到对应的js文件中的内容。就可以实现在本地访问了。

由于不同网站有不同的处理方式,代码我就不贴上来了,其实也就是字符串的操作。比较麻烦,写起来还是挺简单的。

多线程是必须的,不然特别慢

微信公众号:二虎程序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Teleport Ultra 是一款强大的网页取工具,可以用于取包括 Vue 页面在内的各种网页。Vue 是一种流行的 JavaScript 框架,常用于构建现代化的单页面应用程序(SPA)。这种应用程序在页面渲染过程中使用动态编译生成 HTML 内容,对一般的虫工具来说,可能会遇到一些挑战。 然而,Teleport Ultra 具备了适应复杂网页的能力。它可以模拟浏览器行为,对 Vue 页面进行完整的渲染和执行。通过运行 JavaScript 代码,Teleport Ultra 可以解析 Vue 组件,动态生成网页内容,并将其保存为静态 HTML 文件。 使用 Teleport Ultra 取 Vue 页面的步骤如下: 1. 首先,打开 Teleport Ultra 工具,并输入要取的 Vue 页面的 URL。 2. 接下来,Teleport Ultra 会模拟一个浏览器环境,并加载该页面。它会执行其中的 JavaScript 代码,以确保完整的页面渲染。在这个过程中,Vue 组件会被动态编译和渲染。 3. 当页面完全加载和渲染完成后,Teleport Ultra 将生成一个静态 HTML 文件,其中包含了动态生成的内容。这个文件可以完整地展示 Vue 页面的结构和信息。 4. 最后,用户可以通过打开生成的 HTML 文件来查看取到的 Vue 页面。这个文件将会保留原本的布局、样式和交互效果。 总之,Teleport Ultra 是一款非常实用的工具,能够帮助我们有效地取包括 Vue 页面在内的各种网页。通过模拟浏览器环境和执行 JavaScript 代码,Teleport Ultra 能够很好地处理动态生成的内容,帮助我们获取所需的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值