1. 程式人生 > >Jsoup 爬取頁面的資料和 理解HTTP訊息頭

Jsoup 爬取頁面的資料和 理解HTTP訊息頭

推薦一本書:黑客攻防技術寶典.Web實戰篇  ;

      順便留下一個疑問:是否能通過jsoup大量併發訪問web或者小型域名伺服器,使其癱瘓?其實用jsoup熟悉的朋友可以用它解析url來幹一件很無恥的事(原始碼保密)。呵呵,接下來簡單的介紹下JSOUP。

      jsoup 是一款基於Java 的HTML解析器,可直接解析某個URL地址、HTML文字字串、HTML檔案。它提供了一套非常省力的API,可通過DOM,CSS以及類似於jQuery的操作方法來取出和操作資料。

     官網下載地址:http://jsoup.org/download,下載core library。匯入專案

     1:解析HTML文字字串


  1. /** 

  2. * 解析一個html文件。String型別 

  3. */

  4. ublic staticvoid 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狀態返回碼可參照最後部分,或者推薦的那本書

  1. /** 

  2.      * 通過請求地址獲取html 

  3.      */

  4.     publicstaticvoid 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<CR>  —請求方式,請求物件,請求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, */*<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>    本機的相關係資訊,包括瀏覽器型別、作業系統資訊等,很多網站可以顯示出你所使用的瀏覽器和作業系統版本,就是因為可以從這裡獲取到這些資訊。
Host: localhost:8080<CR> 主機和埠,在網際網路上一般指域名
Connection: Keep-Alive<CR> 是否需要持久連線
<CR>

伺服器發回的完整HTTP訊息如下:
HTTP/1.1 200 OK<CR>    —HTTP/1.1 表示表示所用的協議。200OK 指伺服器返回的狀態碼,正常返回
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客戶程式(例如瀏覽器,向伺服器傳送請求的時候必須指明請求型別(一般是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型別。 

        </div>
            </div>

相關推薦

Jsoup 頁面資料 理解HTTP訊息

推薦一本書:黑客攻防技術寶典.Web實戰篇  ;       順便留下一個疑問:是否能通過jsoup大量併發訪問web或者小型域名伺服器,使其癱瘓?其實用jsoup熟悉的朋友可以用它解析url來幹一件很無恥的事(原始碼保密)。呵呵,接下來簡單的介紹下JSOUP。       jsoup 是一款基於J

python 使用seleniumrequests頁面資料

目的:獲取某網站某使用者下市場大於1000秒的視訊資訊 1.本想通過介面獲得結果,但是使用post傳送資訊到介面,提示服務端錯誤。 2.通過requests獲取頁面結果,使用html解析工具,發現麻煩而且得不到想要的結果 3.直接通過selenium獲取控制元件的屬性資訊,如圖片、視訊地址,再對時間進行篩選

深入理解HTTP訊息(一)

初識HTTP訊息頭     但凡搞 WEB 開發的人都離不開HTTP(超文字傳輸協議),而要了解HTTP,除了HTML本身以外,還有一部分不可忽視的就是HTTP訊息頭。 做 過Socket程式設計的人都知道,當我們設計一個通訊協議時,“訊息頭/訊息

理解HTTP訊息 (二)

GET/ HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg,image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel,application/vnd.ms-powerp

理解HTTP訊息【很完整,例子也很豐富】

但凡搞WEB開發的人都離不開HTTP(超文字傳輸協議),而要了解HTTP,除了HTML本身以外,還有一部分不可忽視的就是HTTP訊息頭。 做過Socket程式設計的人都知道,當我們設計一個通訊協議時,“訊息頭/訊息體”的分割方式是很常用的,訊息頭告訴對方這個訊息是幹什麼的,訊息體告訴對方怎麼幹。HTTP傳輸的

Jsouptable頁面資料

昨天接到一個任務需要爬取一個網頁的table資料,因為第一次接觸有些打怵。查詢資料尋找解決的方法。 查到不少資料都在用jsoup . 需要下載jsoup-1.8.1.jar 包 jsoup 是一款Java 的HTML解析器,可直接解析某個URL地址、HTML文字

Java爬蟲--利用HttpClientJsoup部落格資料並存入資料庫

  由於今日頭條等頭條類產品的出現,以今日頭條為代表所使用的爬蟲技術正在逐漸火熱,在爬蟲領域具有良好效能和較好效果的Python在最近一年的時間裡逐漸火熱起來,同時因為Python良好的資料分析和機器學習的能力,Python的應用越來越廣泛。不過,今天我們要提到

頁面審查元素獲取的內容不一致

打開 nbsp 手機信息 發送 http arm 動態網站 結果 手機 今天看書看到 圖片爬蟲實戰之爬取京東手機圖片 這一節,想著自己動手練習一下,因為以前看過視頻所以思路還是比較清晰,主要是為了復習鞏固剛剛學的正則表達式。 打開京東手機頁面, https://li

python 使用seleniumrequests頁面數據

ret pre tex 爬取 test user 發現 rom request 目的:獲取某網站某用戶下市場大於1000秒的視頻信息 1.本想通過接口獲得結果,但是使用post發送信息到接口,提示服務端錯誤。 2.通過requests獲取頁面結果,使用html解析工具,發現

根據地理位置關鍵詞twitter資料並生成詞雲

根據地理位置和關鍵詞爬取twitter資料存入MongoDB並生成詞雲 轉載註明出處 tweepy獲取資料 生成詞雲 tweepy獲取資料 1. 建立model model.py class twitter_post(Document):

python爬蟲(3)——python大規模資料的的方法步驟

python爬取大規模資料的的方法和步驟: 一、爬取我們所需要的一線連結 channel_extract.py 這裡的一線連結也就是我們所說的大類連結: from bs4 import BeautifulSoup import requests

Scrapy框架的學習(2.scrapy入門,簡單頁面,並使用管道(pipelines)儲存資料)

上個部落格寫了:  Scrapy的概念以及Scrapy的詳細工作流程 https://blog.csdn.net/wei18791957243/article/details/86154068 1.scrapy的安裝  pip install scrapy

利用Jsoup天貓列表頁資料

由於技術有限天貓詳細頁的銷售資料爬取不到,所以採用折中的方法改為爬列表頁. 本文針對的是店內搜尋頁 以下是獲取網頁資料: /** * @param URL 根據URL獲取document

如何通過jsoup網路爬蟲工具網頁資料,並通過jxl工具匯出到excel

 1:閒話少說,直接看需求: 抓取的url:http://www.shparking.cn/index.php/welcome/municipal_parking?key=&per_page=.  參考的資料:http://blog.csdn.net/lmj6235

jsoup 資料(一)

本人因需要大量資料,今天第一天接觸爬蟲,使用江湖傳說java下的jquery之稱的jsoup,確實很方便易上手,也是目前比較流行的技術,對初學者來說非常easy,下面我也會繼續寫n篇記錄自己的學習成長曲線,後續會出分頁爬取與圖片爬取,以及新增資料庫的blog.

攜程螞蜂窩的景點評論資料\攜程評論資料\旅遊網站資料

本人長期出售超大量微博資料、旅遊網站評論資料,並提供各種指定資料爬取服務,Message to [email protected]。同時歡迎加入社交媒體資料交流群:99918768 前言   為了獲取多源資料需要到各個網站獲取一些景點的評論資訊

jsoup指定網頁的url圖片

import org.apache.commons.io.IOUtils; import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; imp

使用jsoup玩Android網站導航資料

知識點 - 使用jsoup爬取玩Android網站中的導航資料 - 輸出md格式的表格 /** * Created by monty on 2018/3/9. */ public class WanAndroid {

使用Java及jsoup鏈家北京二手房房價資料

由於是初次使用Java寫爬蟲,所以程式碼有些繁瑣,請大家見諒,並能給與指正首先分析鏈家北京二手房頁面,使用360瀏覽器的審查元素功能,檢視原始碼,獲取查詢標籤如圖一級查詢所示,此圖標籤所獲取的是鏈家北京二手房頁面下的一級地區地址由於具體獲取有些複雜,故列大致步驟如下主頁——》

scrapy海量資料並儲存在MongoDBMySQL資料庫中

前言        一般我們都會將資料爬取下來儲存在臨時檔案或者控制檯直接輸出,但對於超大規模資料的快速讀寫,高併發場景的訪問,用資料庫管理無疑是不二之選。首先簡單描述一下MySQL和MongoDB的區別:MySQL與MongoDB都是開源的常用資料庫,MySQL是傳