国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

初步認(rèn)識網(wǎng)絡(luò)爬蟲

2019-11-14 16:57:13
字體:
供稿:網(wǎng)友

無論你是由于什么原因想做一個網(wǎng)絡(luò)爬蟲,首先做的第一件事情就是要了解它。

 

在了解網(wǎng)絡(luò)爬蟲之前一定要牢記以下4個要點(diǎn),這是做網(wǎng)絡(luò)爬蟲的基礎(chǔ):

 

1.抓取

 

py的urllib不一定去用,但是要學(xué),如果你還沒用過的話。比較好的替代品有requests等第三方更人性化、成熟的庫,如果pyer不了解各種庫,那就白學(xué)了。抓取最基本就是拉網(wǎng)頁回來。

 

如果深入做下去,你會發(fā)現(xiàn)要面對不同的網(wǎng)頁要求,比如有認(rèn)證的,不同文件格式、編碼處理,各種奇怪的url合規(guī)化處理、重復(fù)抓取問題、cookies跟隨問題、多線程多進(jìn)程抓取、多節(jié)點(diǎn)抓取、抓取調(diào)度、資源壓縮等一系列問題。

 

所以第一步就是拉網(wǎng)頁回來,慢慢你會發(fā)現(xiàn)各種問題待你優(yōu)化。

 

2.存儲

 

抓回來一般會用一定策略存下來,而不是直接分析,個人覺得更好的架構(gòu)應(yīng)該是把分析和抓取分離,更加松散,每個環(huán)節(jié)出了問題能夠隔離另外一個環(huán)節(jié)可能出現(xiàn)的問題,好排查也好更新發(fā)布。

 

那么存文件系統(tǒng)、SQLorNOSQL數(shù)據(jù)庫、內(nèi)存數(shù)據(jù)庫,如何去存就是這個環(huán)節(jié)的重點(diǎn)。你可以選擇存文件系統(tǒng)開始,然后以一定規(guī)則命名。

 

3.分析

 

對網(wǎng)頁進(jìn)行文本分析,提取鏈接也好,提取正文也好,總之看你的需求,但是一定要做的就是分析鏈接了??梢杂媚阏J(rèn)為最快最優(yōu)的辦法,比如正則表達(dá)式。然后將分析后的結(jié)果應(yīng)用與其他環(huán)節(jié):)

 

4.展示

 

要是你做了一堆事情,一點(diǎn)展示輸出都沒有,如何展現(xiàn)價值?所以找到好的展示組件,去show出肌肉也是關(guān)鍵。
如果你為了做個站去寫爬蟲,抑或你要分析某個東西的數(shù)據(jù),都不要忘了這個環(huán)節(jié),更好地把結(jié)果展示出來給別人感受。

 

網(wǎng)絡(luò)爬蟲的定義

 

網(wǎng)絡(luò)爬蟲,即Web Spider,是一個很形象的名字。

 

把互聯(lián)網(wǎng)比喻成一個蜘蛛網(wǎng),那么Spider就是在網(wǎng)上爬來爬去的蜘蛛。

 

網(wǎng)絡(luò)蜘蛛是通過網(wǎng)頁的鏈接地址來尋找網(wǎng)頁的。

 

從網(wǎng)站某一個頁面(通常是首頁)開始,讀取網(wǎng)頁的內(nèi)容,找到在網(wǎng)頁中的其它鏈接地址,然后通過這些鏈接地址尋找下一個網(wǎng)頁,這樣一直循環(huán)下去,直到把這個網(wǎng)站所有的網(wǎng)頁都抓取完為止。如果把整個互聯(lián)網(wǎng)當(dāng)成一個網(wǎng)站,那么網(wǎng)絡(luò)蜘蛛就可以用這個原理把互聯(lián)網(wǎng)上所有的網(wǎng)頁都抓取下來。

 

這樣看來,網(wǎng)絡(luò)爬蟲就是一個爬行程序,一個抓取網(wǎng)頁的程序。

 

網(wǎng)絡(luò)爬蟲的基本操作是抓取網(wǎng)頁。那么如何才能隨心所欲地獲得自己想要的頁面?

 

我們先從URL開始。

 

首先獲取網(wǎng)頁真正的url,簡單的代碼如下:

 

1
2
3
4
5
6
7
8
9
from urllib2 import Request, urlopen, URLError, HTTPError
#導(dǎo)入urllib2模塊,且直接使用Request,不需要urllib2.Request(from... import...)  
PRint 'Old url :' + old_url 
print 'Real url :' + response.geturl()

 

運(yùn)行這串代碼,會報HTTPError:403錯誤,表示站點(diǎn)拒絕網(wǎng)絡(luò)爬蟲訪問。下面列出HTTP狀態(tài)碼:

 

HTTP狀態(tài)碼通常分為5種類型,分別以1~5五個數(shù)字開頭,由3位整數(shù)組成:

 

 

 

------------------------------------------------------------------------------------------------
200:請求成功      處理方式:獲得響應(yīng)的內(nèi)容,進(jìn)行處理 
201:請求完成,結(jié)果是創(chuàng)建了新資源。新創(chuàng)建資源的URI可在響應(yīng)的實(shí)體中得到    處理方式:爬蟲中不會遇到 
202:請求被接受,但處理尚未完成    處理方式:阻塞等待 
204:服務(wù)器端已經(jīng)實(shí)現(xiàn)了請求,但是沒有返回新的信 息。如果客戶是用戶代理,則無須為此更新自身的文檔視圖。    處理方式:丟棄
300:該狀態(tài)碼不被HTTP/1.0的應(yīng)用程序直接使用, 只是作為3XX類型回應(yīng)的默認(rèn)解釋。存在多個可用的被請求資源。    處理方式:若程序中能夠處理,則進(jìn)行進(jìn)一步處理,如果程序中不能處理,則丟棄
301:請求到的資源都會分配一個永久的URL,這樣就可以在將來通過該URL來訪問此資源    處理方式:重定向到分配的URL
302:請求到的資源在一個不同的URL處臨時保存     處理方式:重定向到臨時的URL 
304 請求的資源未更新     處理方式:丟棄 
400 非法請求     處理方式:丟棄 
401 未授權(quán)     處理方式:丟棄 
403 禁止     處理方式:丟棄 
404 沒有找到     處理方式:丟棄 
5XX 回應(yīng)代碼以“5”開頭的狀態(tài)碼表示服務(wù)器端發(fā)現(xiàn)自己出現(xiàn)錯誤,不能繼續(xù)執(zhí)行請求    處理方式:丟棄

 

這時候我們該怎么辦呢?其實(shí)很簡單,讓爬蟲偽裝成正常ip訪問網(wǎng)站就可以解決了。代碼如下:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
---------------------------------------
   程序:twxs爬蟲 
   版本:0.1 
   作者:貪玩小神 
   日期:2015-07-29 
   語言:Python 2.7  
   功能:輸出站點(diǎn)真實(shí)的url 
---------------------------------------
import urllib
import urllib2
#導(dǎo)入urllib,urllib2模塊,不推薦使用from ... import ...
old_url = '
#設(shè)置初始值old_url,user_agent
#User-Agent : 有些服務(wù)器或 Proxy 會通過該值來判斷是否是瀏覽器發(fā)出的請求,這里設(shè)置User-Agent來偽裝成瀏覽器
values = {'name' : 'Michael Foord',
          'location' : 'Northampton',
          'language' : 'Python' }
headers = { 'User-Agent' : user_agent }
#初始化操作
data = urllib.urlencode(values)
req = urllib2.Request(old_url, data, headers=headers)
#客戶端向服務(wù)器發(fā)送請求
response = urllib2.urlopen(req)
#服務(wù)器相應(yīng)客戶端的請求
print 'Old url :' + old_url 
print 'Real url :' + response.geturl()

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 兰坪| 梅州市| 白沙| 高淳县| 伽师县| 巨鹿县| 大埔县| 彭山县| 甘孜县| 新河县| 乌恰县| 东源县| 滦平县| 东乡县| 黎城县| 吉林市| 瓦房店市| 长沙市| 泽库县| 富阳市| 镇江市| 库车县| 双牌县| 泰安市| 泸西县| 高雄县| 镇江市| 麻江县| 岑溪市| 章丘市| 巩留县| 老河口市| 汶川县| 朝阳县| 黑山县| 正宁县| 揭西县| 齐齐哈尔市| 绥中县| 福建省| 岳普湖县|