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

最开始是用 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文件中的内容。就可以实现在本地访问了。

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

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

微信公众号:二虎程序

Teleport Ultra抓取不到登陆后的页面相关推荐

  1. 【Python爬虫教学】百度篇·手把手教你抓取百度搜索关键词后的页面源代码

    [开门见山] 最近整理了下之前做过的项目,学的东西不少,乱七八糟.打算写点关于 Python 爬虫的东西,新人一枚,还望大佬们多多担待,别把我头给打歪了. 前面我先磨叽磨叽些基础的东西,对爬虫新人友好 ...

  2. 使用teleport ultra爬取网站源码

    有时候看到好看的网站总想爬取下来玩一玩,模仿一下,这里介绍一个好用的工具teleport ultra 下载链接:teleport ultral 下载之后,安装,注意安装的时候把默认勾选的推广软件取消了 ...

  3. Teleport Ultra 抓包工具

    Teleport Ultra 所能做的,不仅仅是离线浏览某个网页,它可以从 Internet 的任何地方抓回你想要的任何文件. 它可以在你指定的时间自动登录到你指定的网站下载你指定的内容,你还可以用它 ...

  4. 电子台账:模板制作之四——抓取多行数据后自动进行数据合并(脑力活版本)

    1 前言 前面介绍了制作行过滤模板体力活版本,这种方式下,如果产品很多,会非常麻烦,因为需要把每个产品都拖到模板中. 聪明的小伙伴需要来个批量完成,恰好咱们这个小软件就有这个功能. 把原来那个需求简图 ...

  5. python frame框架抓取_Python抓取框架Scrapy爬虫入门:页面提取

    前言 Scrapy是一个非常好的抓取框架,它不仅提供了一些开箱可用的基础组建,还能够根据自己的需求,进行强大的自定义.本文主要给大家介绍了关于Python抓取框架Scrapy之页面提取的相关内容,分享 ...

  6. java取网页数据_Java抓取网页数据(原来的页面+Javascript返回数据)

    转载请注明出处. 有时候因为种种原因.我们须要採集某个站点的数据.但因为不同站点对数据的显示方式略有不同! 本文就用Java给大家演示怎样抓取站点的数据:(1)抓取原网页数据.(2)抓取网页Javas ...

  7. 微信小程序登陆后的页面显示tabbar

    微信小程序登录后,可以在页面中使用 "tabbar" 组件来显示底部导航栏. 在微信小程序的 app.json 文件中,可以配置 "tabBar" 属性来配置底 ...

  8. 数据从业者必读:抓取了一千亿个网页后我才明白,爬虫一点都不简单

    编者按:互联网上有浩瀚的数据资源,要想抓取这些数据就离不开爬虫.鉴于网上免费开源的爬虫框架多如牛毛,很多人认为爬虫定是非常简单的事情.但是如果你要定期上规模地准确抓取各种大型网站的数据却是一项艰巨的挑 ...

  9. ListView与.FindControl()方法的简单练习 #2 -- ItemUpdting事件中抓取「修改后」的值

    原文出處  http://www.dotblogs.com.tw/mis2000lab/archive/2013/06/24/listview_itemupdating_findcontrol_201 ...

最新文章

  1. Backtrack的安装配置
  2. 安装linux系统报softlock,soft lockup 解决思路
  3. 我的android面试经历
  4. java kafka 消费_java编程之Kafka_消费者API详解
  5. boost::intrusive_ref_counter相关的测试程序
  6. java数组复制用for_在JavaScript中复制数组的最快方法 - 切片与'for'循环
  7. matlab 邻近度 离群点_MATLAB自制迷宫游戏,快来试试吧!
  8. java实现表达式求值_如何编写一个高效的Java表达式求值程序
  9. SQL WITH NOCHECK 和 CLUSTERED | NONCLUSTERED
  10. 20135219洪韶武——信息安全系统设计基础第四周学习总结
  11. 二叉排序树[2005年华中科技大学计算机保研机试真题]
  12. FTP的主、被动模式
  13. android 美团滑动停止,cc美团 滑动删除(SwipeListView)
  14. vue mianjs 引用css_7个有用的Vue开发技巧
  15. Mellanox:撑起国内超融合的网络天空
  16. mongdb 模糊查询
  17. 一次排查服务器挖矿病毒
  18. 屌丝Cent OS服务器应用之--SVN
  19. 支付宝登录java_支付宝登录java和android
  20. 蓝牙学习笔记之LMP协议(十二)

热门文章

  1. MSDE的SA密码问题
  2. C++关于字符串String的一些操作
  3. 计算机作图中常用的辅助工具,[计算机软件及应用]电脑辅助机械制图.doc
  4. 知识分享||PCB线路板六层板的的常规叠层结构
  5. 【EXCEL】冻结窗口的设置
  6. frida药监局爬虫app签名逆向,数据采集
  7. 数据库优化的措施有哪些
  8. JVET H.266编码技术amp;JEM编码平台关键技术整理分析
  9. 单应性矩阵 matlab,matlab 在求定标中单映性矩阵
  10. Vue 报错 WDS Disconnected