欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  web前端

Jsoup 爬取页面的数据和 理解HTTP消息头_html/css_WEB-ITnose

程序员文章站 2022-05-03 12:05:43
...
推荐一本书:黑客攻防技术宝典.Web实战篇 ;

顺便留下一个疑问:是否能通过jsoup大量并发访问web或者小型域名服务器,使其瘫痪?其实用jsoup熟悉的朋友可以用它解析url来干一件很无耻的事(源码保密)。呵呵,接下来简单的介绍下JSOUP。

jsoup 是一款基于Java 的HTML解析器,可直接解析某个URL地址、HTML文本字符串、HTML文件。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

官网下载地址:http://jsoup.org/download,下载core library。导入项目

1:解析HTML文本字符串

[java] view plain copy

  1. /**
  2. * 解析一个html文档。String类型
  3. */
  4. ublic static void parseStringHtml(String html) {
  5. Document doc = Jsoup.parse(html);//把String转化成document格式
  6. Elements e=doc.body().getAllElements();//获取所以body下的节点集
  7. Elements e1=doc.select("head");//获取head 节点集
  8. Element e2=doc.getElementById("p");//获取html上id=“p”的节点
  9. System.out.println(e1);
2:解析url。这部分是重点 , 有部分网址不一定都能直接获取连接。for example :CSDN这种域名网站。这种一定要设置消息头代理。 否则报错:像HTTP error fetching URL. Status=403。等http状态异常 。具体HTTP状态返回码可参照最后部分,或者推荐的那本书

[java] view plain copy

  1. /**
  2. * 通过请求地址获取html
  3. */
  4. public static void parseRequestUrl(String url) throws IOException{
  5. Connection con = Jsoup.connect(url);//获取请求连接
  6. // //浏览器可接受的MIME类型。
  7. // con.header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
  8. // con.header("Accept-Encoding", "gzip, deflate");
  9. // con.header("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3");
  10. // con.header("Connection", "keep-alive");
  11. // con.header("Host", url);
  12. // con.header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0");
  13. Document doc=con.get();
  14. Elements hrefs=doc.select("a[href=/kff517]"); //节点后面属性 不需要
  15. Elements test=doc.select("html body div#container div#body div#main div.main div#article_details.details div.article_manage span.link_view");
  16. System.out.println(hrefs);
  17. System.out.println(test.text());//==.html获取节点中的文本,类似于js中的方法
  18. }

3 :解析一个本地html文件。这个大同小异,改变下DOCUMENT的获取方式。


整理了一些关于HTTP 消息头资料:

GET /simple.htm HTTP/1.1 ---请求方式,请求对象,请求http协议
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* --指浏览器能接收的Content-type
Accept-Language: zh-cn ---接收语言
Accept-Encoding: gzip, deflate --接收编码
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727) 本机的相关系信息,包括浏览器类型、操作系统信息等,很多网站可以显示出你所使用的浏览器和操作系统版本,就是因为可以从这里获取到这些信息。
Host: localhost:8080 主机和端口,在互联网上一般指域名
Connection: Keep-Alive 是否需要持久连接


服务器发回的完整HTTP消息如下:
HTTP/1.1 200 OK ---HTTP/1.1 表示表示所用的协议。200OK 指服务器返回的状态码,正常返回
Server: Microsoft-IIS/5.1
X-Powered-By: ASP.NET
Date: Fri, 03 Mar 2006 06:34:03 GMT
Content-Type: text/html
Accept-Ranges: bytes
Last-Modified: Fri, 03 Mar 2006 06:33:18 GMT
ETag: "5ca4f75b8c3ec61:9ee"
Content-Length: 37

hello world

注意:是我加上去代表换行的,可以删掉,没有意义

HTTP请求头概述
   HTTP客户程序(例如浏览器,向服务器发送请求的时候必须指明请求类型(一般是GET或者POST。如必要,客户程序还可以择发送其他的请求头。大多数请求头并不是必需的,但Content- Length除外。对于POST请求来说Content-Length必须出现。
 下面是一些最常见的请求头

  Accept:浏览器可接受的MIME类型。 表示我们所用的浏览器能接受的Content-type
   Accept-Charset:浏览器可接受的字符集。
   Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间。
   Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。
   Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。
   Connection:表示是否需要持久连接。如果Servlet看到这里的值为"Keep-Alive",或者看到请求使用的是HTTP 1.1 (HTTP 1.1默认进行持久连接,它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片,显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入 ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。
   Content-Length:表示请求消息正文的长度。
   Cookie:这是最重要的请求头信息之一
   From:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。
   Host:初始URL中的主机和端口。
   If-Modified-Since:只当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304"Not Modified"应答。
   Pragma:指定"no-cache"值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝。
   Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。
   User-Agent:浏览器类型,如果Servlet返回的内容与浏览器类型关则该值非常用。
   UA-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型。