日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Jsoup 抓取和数据页 认识HTTP头

發(fā)布時間:2023/11/29 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Jsoup 抓取和数据页 认识HTTP头 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

推薦一本書:黑客攻防技術(shù)寶典.Web實(shí)戰(zhàn)篇? ;

? ? ??順便留下一個疑問:能否通過jsoup大量并發(fā)訪問web或者小型域名server,使其癱瘓?其有用jsoup熟悉的朋友能夠用它解析url來干一件非常無恥的事(源代碼保密)。呵呵。接下來簡單的介紹下JSOUP。

? ? ? jsoup 是一款基于Java 的HTML解析器。可直接解析某個URL地址、HTML文本字符串、HTML文件。它提供了一套很省力的API。可通過DOM,CSS以及類似于jQuery的操作方法來取出和操作數(shù)據(jù)。

? ? ?官網(wǎng)下載地址:http://jsoup.org/download,下載core library。導(dǎo)入項(xiàng)目

? ???1:解析HTML文本字符串

[java]?view plaincopy
  • ??/**?
  • *?解析一個html文檔。

    String類型

    ?
  • */??
  • ublic?static?void?parseStringHtml(String?html)?{??
  • Document?doc?=?Jsoup.parse(html);//把String轉(zhuǎn)化成document格式???????
  • Elements?e=doc.body().getAllElements();//獲取所以body下的節(jié)點(diǎn)集??
  • Elements?e1=doc.select("head");//獲取head?節(jié)點(diǎn)集??
  • Element?e2=doc.getElementById("p");//獲取html上id=“p”的節(jié)點(diǎn)??
  • System.out.println(e1);??
  • ? ??2:解析url。

    這部分是重點(diǎn)

    有部分網(wǎng)址不一定都能直接獲取連接。for example ?:CSDN這樣的域名站點(diǎn)。這樣的一定要設(shè)置消息頭代理。? ? 否則報(bào)錯:像HTTP error fetching URL. Status=403。

    等http狀態(tài)異常

    。詳細(xì)HTTP狀態(tài)返回碼可參照最后部分,或者推薦的那本書

    [java]?view plaincopy
  • ????/**?
  • ?????*?通過請求地址獲取html?
  • ?????*/??
  • ????public?static?void?parseRequestUrl(String?url)?throws?IOException{??
  • ????????Connection?con?=?Jsoup.connect(url);//獲取請求連接??
  • //??????//瀏覽器可接受的MIME類型。

    ??
  • //??????con.header("Accept",?"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");??
  • //??????con.header("Accept-Encoding",?"gzip,?deflate");??
  • //??????con.header("Accept-Language",?"zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3");??
  • //??????con.header("Connection",?"keep-alive");??
  • //??????con.header("Host",?url);??
  • //??????con.header("User-Agent",?"Mozilla/5.0?(Windows?NT?6.1;?WOW64;?rv:26.0)?Gecko/20100101?Firefox/26.0");??
  • ????????Document?doc=con.get();??
  • ????????Elements?hrefs=doc.select("a[href=/kff517]");??//節(jié)點(diǎn)后面屬性?不須要??
  • ????????Elements?test=doc.select("html?body?div#container?div#body?div#main?div.main?div#article_details.details?div.article_manage?span.link_view");??
  • ????????System.out.println(hrefs);??
  • ????????System.out.println(test.text());//==.html獲取節(jié)點(diǎn)中的文本,類似于js中的方法??
  • ????}??

  • ? ? 3解析一個本地html文件。這個大同小異,改變下DOCUMENT的獲取方式。


    整理了一些關(guān)于HTTP 消息頭資料:

    GET /simple.htm HTTP/1.1<CR> ?---請求方式。請求對象。請求http協(xié)議
    Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*<CR> ? ? ?--指瀏覽器能接收的Content-type
    Accept-Language: zh-cn<CR> ? ---接收語言
    Accept-Encoding: gzip, deflate<CR> ? --接收編碼
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)<CR> ? ?本機(jī)的相關(guān)系信息。包含瀏覽器類型、操作系統(tǒng)信息等,非常多站點(diǎn)能夠顯示出你所使用的瀏覽器和操作系統(tǒng)版本號,就是由于能夠從這里獲取到這些信息。
    Host: localhost:8080<CR> 主機(jī)和port,在互聯(lián)網(wǎng)上一般指域名
    Connection: Keep-Alive<CR> 是否須要持久連接
    <CR>

    server發(fā)回的完整HTTP消息例如以下:
    HTTP/1.1 200 OK<CR> ? ?---HTTP/1.1 表示表示所用的協(xié)議。200OK 指server返回的狀態(tài)碼。正常返回
    Server: Microsoft-IIS/5.1<CR> ??
    X-Powered-By: ASP.NET<CR>
    Date: Fri, 03 Mar 2006 06:34:03 GMT<CR> ??
    Content-Type: text/html<CR>
    Accept-Ranges: bytes<CR>
    Last-Modified: Fri, 03 Mar 2006 06:33:18 GMT<CR>
    ETag: "5ca4f75b8c3ec61:9ee"<CR>
    Content-Length: 37<CR>
    <CR>
    <html><body>hello world</body></html>

    注意:<CR>是我加上去代表換行的。能夠刪掉,沒有意義

    HTTP請求頭概述?
       HTTP客戶程序(比如瀏覽器。向server發(fā)送請求的時候必須指明請求類型(通常是GET或者POST。如必要。客戶程序還能夠擇發(fā)送其它的請求頭。

    大多數(shù)請求頭并非必需的,但Content- Length除外。對于POST請求來說Content-Length必須出現(xiàn)。

    ?
     以下是一些最常見的請求頭?

    ? ?  Accept:瀏覽器可接受的MIME類型。 表示我們所用的瀏覽器能接受的Content-type
       Accept-Charset:瀏覽器可接受的字符集。?
       Accept-Encoding:瀏覽器可以進(jìn)行解碼的數(shù)據(jù)編碼方式。比方gzip。Servlet可以向支持gzip的瀏覽器返回經(jīng)gzip編碼的HTML頁面。

    很多情形下這可以降低5到10倍的下載時間。?
       Accept-Language:瀏覽器所希望的語言種類,當(dāng)server可以提供一種以上的語言版本號時要用到。

    ?
       Authorization:授權(quán)信息,通常出如今對server發(fā)送的WWW-Authenticate頭的應(yīng)答中。?
       Connection:表示是否須要持久連接。假設(shè)Servlet看到這里的值為"Keep-Alive",或者看到請求使用的是HTTP 1.1 (HTTP 1.1默認(rèn)進(jìn)行持久連接。它就能夠利用持久連接的長處,當(dāng)頁面包括多個元素時(比如Applet,圖片,顯著地降低下載所須要的時間。要實(shí)現(xiàn)這一點(diǎn),Servlet須要在應(yīng)答中發(fā)送一個Content-Length頭。最簡單的實(shí)現(xiàn)方法是:先把內(nèi)容寫入 ByteArrayOutputStream。然后在正式寫出內(nèi)容之前計(jì)算它的大小。

    ?
       Content-Length:表示請求消息正文的長度。

    ?
       Cookie:這是最重要的請求頭信息之中的一個
       From:請求發(fā)送者的email地址,由一些特殊的Web客戶程序使用,瀏覽器不會用到它。?
       Host:初始URL中的主機(jī)和port。

    ?
       If-Modified-Since:僅僅當(dāng)所請求的內(nèi)容在指定的日期之后又經(jīng)過改動才返回它。否則返回304"Not Modified"應(yīng)答。?
       Pragma:指定"no-cache"值表示server必須返回一個刷新后的文檔,即使它是代理server并且已經(jīng)有了頁面的本地拷貝。?
       Referer:包括一個URL,用戶從該URL代表的頁面出發(fā)訪問當(dāng)前請求的頁面。?
    ?    User-Agent:瀏覽器類型,假設(shè)Servlet返回的內(nèi)容與瀏覽器類型關(guān)則該值很常使用。?
       UA-Pixels,UA-Color。UA-OS,UA-CPU:由某些版本號的IE瀏覽器所發(fā)送的非標(biāo)準(zhǔn)的請求頭,表顯示屏尺寸、顏色深度、操作系統(tǒng)和CPU種類。

    ?

    版權(quán)聲明:本文博客原創(chuàng)文章,博客,未經(jīng)同意,不得轉(zhuǎn)載。

    總結(jié)

    以上是生活随笔為你收集整理的Jsoup 抓取和数据页 认识HTTP头的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。