網路爬蟲之鏈結網頁

2021-07-27 23:30:09 字數 3001 閱讀 5644

訪問網頁眉先要請求url,也就是**鏈結。python提供了urllib2函式進行鏈結。具體如下:

importurllib2
req=urllib2.request('')

fd=urllib2.urlopen(req)

request裡面的第乙個引數為**的鏈結,裡面還可以攜帶頭資訊以及具體要傳遞給**的資訊。這樣說比較抽象。我們用wireshark抓取乙個上網的報文。在google瀏覽器中輸入www.sina.com.cn.可以看到如下資訊。這就是從電腦上發出去的請求。其中有幾個關鍵資訊:requestmethod: get. 這裡有兩種方式,get和post,get主要是用於請求資料,post可以用來提交資料。

user-agent指的是使用者**,什麼意思呢。通過這些訊息,伺服器就能夠識別客戶使用的作業系統以及瀏覽器。一般伺服器可以通過來識別是否是爬蟲。這個後面講

referer可以認為是你需要從伺服器上請求什麼**,這裡可以看到就是sina

accet-encoding: 這是告訴電腦可以接受的資料壓縮方式。

那麼為了防止伺服器禁掉我們的申請,該如何應對呢。我們自程式中自己構造乙個和真實瀏覽器一樣的user_agent不就一樣了。

headers=

req=urllib2.request('','',headers)

fd=urllib2.urlopen(req)
新增了headers的描述。request的第乙個引數是**,第二個引數是提交的資料,第三個引數是頭資訊。這裡第二個引數暫時為空。第三個引數新增頭資訊,以字典的形式。可以看到抓包資訊如下。這裡就變成了我們和瀏覽器一樣的形式,這樣伺服器就不會認為是爬蟲了。下一步就是放心的抓取網頁資料了。

增加了保護機制,其中urlerror在沒有網路連線或者伺服器不存在的情況下產生,這種情況下,異常通常會帶有reason屬性.http的錯誤碼如下,具體參考http權威指南

200:請求成功      處理方式:獲得響應的內容,進行處理 

201:請求完成,結果是建立了新資源。新建立資源的uri可在響應的實體中得到    處理方式:爬蟲中不會遇到 

202:請求被接受,但處理尚未完成    處理方式:阻塞等待 

204:伺服器端已經實現了請求,但是沒有返回新的資訊。如果客戶是使用者**,則無須為此更新自身的文件檢視。    處理方式:丟棄

300:該狀態碼不被http/1.0的應用程式直接使用, 只是作為3xx型別回應的預設解釋。存在多個可用的被請求資源。    處理方式:若程式中能夠處理,則進行進一步處理,如果程式中不能處理,則丟棄

301:請求到的資源都會分配乙個永久的url,這樣就可以在將來通過該url來訪問此資源    處理方式:重定向到分配的url

302:請求到的資源在乙個不同的url處臨時儲存    處理方式:重定向到臨時的url 

304 請求的資源未更新     處理方式:丟棄 

400 非法請求     處理方式:丟棄 

401 未授權     處理方式:丟棄 

403 禁止     處理方式:丟棄 

404 沒有找到     處理方式:丟棄 

5xx 回應**以「5」開頭的狀態碼表示伺服器端發現自己出現錯誤,不能繼續執行請求   處理方式:丟棄

下面就是要列印出獲取到的網頁資訊了。request返回乙個獲取網頁的實體,urlopen則是實現開啟網頁fd.read()則可以列印出網頁的具體資訊

**裡面有這個decode和encode的訊息。這個是幹嘛用的呢。這個主要是針對網頁中的中文。python3之前的中文輸出是乙個很憂傷的事情。

printfd.read().decode('utf-8').encode('gb18030')
網頁上的資料也有自己的編碼方式,從下面的截圖的網頁**看到編碼方式是utf-8.而在windows中中文的編碼方式是gbk。

因此如果不進行編碼轉換的話,網頁中的中文就會是亂碼形式:

那麼是否可以提前獲取網頁的編碼方式呢,這也是可以的。如下**就可以得到網頁返回的編碼方式

fd1=urllib2.urlopen(req).info()printfd1.getparam('charset')

網路爬蟲之網頁資料解析(XPath)

xpath定義 xpath表示式 lxml庫 xpath案例 引入有人說,我正則用的不好,處理html文件很累,有沒有其他的方法?有!那就是xpath,我們可以先將網路獲取的string型別資料轉換成 html xml文件,然後用 xpath 查詢 html xml 節點或元素。什麼是xml 大家都...

網頁爬蟲php,php網頁爬蟲

網頁爬蟲 最簡單的使用,屬性都採用預設值 curl curl init output curl exec curl curl close curl echo output 稍微複雜一點的,對頁面進行操作 curl curl init curl setopt curl,curlopt url,可以動態...

網路爬蟲之網頁資料解析(正則re)

正規表示式測試 title u 你好,hello,世界,天安門,願望 pattern re.compile u u4e00 u9fa5 result pattern.findall title print result 貪婪模式與非貪婪模式import re str aatest1 bbtest2 ...