簡單的抓取

2022-09-06 06:54:09 字數 2316 閱讀 7641

**:

由於專案需求,需要採集一些**的內容。在j**a領域中,已經存在很多良好的框架用於該應用,如httpclient,webharvest還有更多強大的框架。但由於本身專案比較單純,且為了良好的自我控制,就決定直接用jdk中的httpurlconnection類來抓取網頁內容。並不是說那些框架不好,而只是不適用本專案。

說明:本博的一切內容均可**,但必須注意出處。樂樂日誌)

一、httpurlconnection連線之模擬瀏覽器

在諸多的**中,特別是大型的**,設定了必須是瀏覽器的請求才會回應。之所以這樣設定,就是為了防止我們這種專案給他產生無意義的請求(往往這種請求都是大批量,對其伺服器產生負荷)。那為了解決這個問題,我們需要在http請求中,新增屬性。

這樣就設定好了,你可以隨意設定你的作業系統值,瀏覽器值,版本,只要正確就ok了。這樣就可以正常有效地訪問其**了。他可不知道你是不是瀏覽器。你即使是條狗,他也不知道。

二、完整的設定httpurlconnection的屬性值

urlconn.setrequestproperty("accept",

"image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,

"gzip");//為什麼沒有deflate呢

urlconn.setrequestproperty("content-type", "text/html");

urlconn.setrequestproperty("connection", "close");

//keep-alive,有什麼用呢,你不是在訪問**,你是在採集。嘿嘿。減輕別人的壓力,也是減輕自己。

urlconn.setusecaches(false);//不要用cache,用了也沒有什麼用,因為我們不會經常對乙個鏈結頻繁訪問。(針對程式)

urlconn.setconnecttimeout(6 * 1000);

urlconn.setreadtimeout(6*1000);

urlconn.setdooutput(true);

urlconn.setdoinput(true);

有什麼疑問的話,可以檢視jdk的api文件,這個可以實時看。至於為什麼要設定

gzip,而又不設定deflate,原因如下,有些**他不管你能接受什麼壓縮格式,統統也會壓縮網頁內容傳給你。當然ie,ff能處理好這些內容。所以我們通過瀏覽器檢視的時候完全正常。一般gzip的壓縮可以將乙個33k的檔案壓縮成7k,這樣會節約不少頻寬,但伺服器的負荷並沒有減輕,因為他要壓縮檔案呀。至於為什麼不用deflate,是由於絕大多數**的壓縮方式是用gzip,而在有些**中,明明是用的gzip卻返回deflate的壓縮標識。這有什麼意義呢,所以乾脆就告訴伺服器,我不接受deflate,因為他太醜了,又長,哪像gzip這麼潮呀。呵呵,對於瀏覽量大的靜態網頁伺服器,這樣做很是必要。100m的獨享伺服器,他也只有100m呀。

三、開始採集某個網頁的內容

該方法就是傳入乙個httpurlconnection的鏈結,和該檔案的字符集編碼,就可以返回其網頁內容了。

}至此乙個簡單的採集工具類誕生了,他的優美在於,**少,不用引入任何包。純jdk,一樣能幹許多事。有時不希望把本來簡單的事情搞得複雜化。雖然不要創造重複的輪子,但我們不能純拿來主義,就像這樣乙個簡單的功能,不需要搞得太複雜。只要不dry就可以了,這樣自己也能一點點地進步。

Python 簡單網路抓取

我們先簡單的說一下如何抓取乙個網頁的源 其實我們只需要呼叫python中的requests庫中的get方法就可以了。然後解析的話我們可以通過beautifulsoup庫來進行解析。requests比較適合做中小型的網路爬蟲開發,如果是要進行大型的網路爬蟲開發那一般使用的就是scrapy框架了。req...

urllib簡單網頁抓取

urllib包 抓取網頁,處理url,包含模組 用urllib實現簡單的網頁抓取 coding utf 8 from urllib import request import chardet if name main response request.urlopen html response.re...

python抓取簡單頁面資訊

我們最常規的做法就是通過滑鼠右鍵,選擇另存為。但有些滑鼠右鍵的時候並沒有另存為選項,還有辦法就通過就是通過截圖工具擷取下來,但這樣就降低的清晰度。好吧 其實你很厲害的,右鍵檢視頁面源 我們可以通過python 來實現這樣乙個簡單的爬蟲功能,把我們想要的 爬取到本地。下面就看看如何使用 python ...