给定一个网站地址(如http://www.souhu.com,程序运行时,输入网站地址,下载本网站的页面及页面包含的相关的其他资源文件(超链接,图片文件,样式文件,脚本文件),并保存在本地文件中,实现整个网站的离线浏览。
参考这个程序:https://www.cnblogs.com/liuxianan/archive/2012/10/09/2717561.html
注意的思路就是遍历链接分别下载,并且要把链接在网页里的指向改成指向相对路径的文件。
另外,一些需要ajax交互的网页,实际上是不能抓取的,因为它们需要实时和服务器交互数据。
参考 https://www.cnblogs.com/qianzf/p/6796588.html
全站下载有点过于复杂了,一般只是要下载网页的话,是没任何问题的,你可以看下像百度新闻,这样的新闻机器人,直接抓取百度新闻这样的更方便一些。
纯粹的离线想要实现我认为是可行的,但是一个问题在于一个网页生成的时候,很很多资源会进行二次请求(也就是一个网页的组成是多次请求的结果),详情可以F12调试看网络那里可以看到:
1.先请求了网页的整体结构
2.请求各种资源,CSS,JS,图片
而这种想要在自己电脑离线出完全的效果的话,那么就相当于你自己写了一个同样结构的网页(HTML),然后其他的CSS,图片,JS等还需要存放到本地,并且把其中对应的标签元素里的请求地址,如img标签里面的src属性的地址该为本地的,林林种种,其实还是蛮复杂的,比如打开淘宝首页,几百张的图片全部需要下载下来,也就是另存为,这种还可能是和源文件相差很大的,图片大小等等
用jsoup吧~ 至于你所说的下载网站的资源 那就只能解析网站里面的链接了 根据链接的后缀区分是样式、脚本、图片等等,然后分别做处理即可~
java的话静态用 jsoup , 动态用 htmlUnit ; 不过我觉得 casperjs 更好些
post或者get请求到网页后打开的是源码,要对源码进行分析,写算法提取title,a标签,img标签,文章内容等,然后除掉表头表尾,获取正文内容,一般最大化就是body里面,剔除所有标签即可。