簡(jiǎn)介
- 網(wǎng)絡(luò)爬蟲(又被稱為網(wǎng)頁蜘蛛侧啼,網(wǎng)絡(luò)機(jī)器人卑惜,在FOAF社區(qū)中間蜀变,更經(jīng)常的稱為網(wǎng)頁追逐者):
是一種按照一定的規(guī)則沟堡,自動(dòng)地抓取萬維網(wǎng)信息的程序或者腳本侧但。另外一些不常使用的名字還有螞蟻、自動(dòng)索引航罗、模擬程序或者蠕蟲禀横。其實(shí)通俗的講就是通過程序去獲取web頁面上自己想要的數(shù)據(jù),也就是自動(dòng)抓取數(shù)據(jù)粥血。 - 爬蟲可以做什么柏锄?
你可以用爬蟲爬圖片,爬取視頻等等你想要爬取的數(shù)據(jù)复亏,只要你能通過瀏覽器訪問的數(shù)據(jù)都可以通過爬蟲獲取趾娃。當(dāng)你在瀏覽器中輸入地址后,經(jīng)過DNS服務(wù)器找到服務(wù)器主機(jī)缔御,向服務(wù)器發(fā)送一個(gè)請(qǐng)求抬闷,服務(wù)器經(jīng)過解析后發(fā)送給用戶瀏覽器結(jié)果,包括html,js,css等文件內(nèi)容,瀏覽器解析出來最后呈現(xiàn)給用戶在瀏覽器上看到的結(jié)果
所以用戶看到的瀏覽器的結(jié)果就是由HTML代碼構(gòu)成的笤成,我們爬蟲就是為了獲取這些內(nèi)容评架,通過分析和過濾html代碼,從中獲取我們想要資源炕泳。
頁面獲取
1) 根據(jù)URL獲取網(wǎng)頁
- URL處理模塊(庫)
import urllib.request as req
- 創(chuàng)建一個(gè)表示遠(yuǎn)程url的類文件對(duì)象
req.urlopen(' ')
- 如同本地文件一樣讀取內(nèi)容
import urllib.request as req
# 根據(jù)URL獲取網(wǎng)頁:
# http://www.hnpolice.com/
url = 'http://www.hnpolice.com/'
webpage = req.urlopen(url) # 按照類文件的方式打開網(wǎng)頁
# 讀取網(wǎng)頁的所有數(shù)據(jù),并轉(zhuǎn)換為uft-8編碼
data = webpage.read().decode('utf-8')
print(data)
2)網(wǎng)頁數(shù)據(jù)存入文件
# 將讀取的網(wǎng)頁數(shù)據(jù)寫入文件:
outfile = open("enrollnudt.txt", 'w') # 打開文件
outfile.write(data) # 將網(wǎng)頁數(shù)據(jù)寫入文件
outfile.close()
此時(shí)我們從網(wǎng)頁中獲取的數(shù)據(jù)已保存在我們指定的文件里纵诞,如下圖
從圖中可以看出,網(wǎng)頁的所有數(shù)據(jù)都存到了本地培遵,但是我們需要的數(shù)據(jù)大部分都是文字或者數(shù)字信息浙芙,而代碼對(duì)我們來說并沒有用處。那么我們接下來要做的是清除沒用的數(shù)據(jù)荤懂。(在這里我將獲取警院新聞中的內(nèi)容)
3)提取內(nèi)容
分析網(wǎng)頁茁裙,尋找所需要的內(nèi)容“警院新聞”
-
內(nèi)容范圍
- <li><a href="show.aspx?id=24797&cid=153" target="_blank"> ...</div>
-
如何將表格中的內(nèi)容都提取出來?
- 導(dǎo)入re包 (正規(guī)表達(dá)式包)
import re
re.findall (pattern, string [, flags] )
- 以列表的形式返回string里匹配pattern的不重疊
的子串- string會(huì)被從左到右依次掃描节仿,返回的列表也是從左到右
一次匹配到的
- string會(huì)被從左到右依次掃描节仿,返回的列表也是從左到右
-
如果pattern里含有組的話晤锥,那么會(huì)返回匹配到的
組的列表
- 導(dǎo)入re包 (正規(guī)表達(dá)式包)
匹配使用正規(guī)表達(dá)式
'<li><a href="show.aspx?id=24797&cid=153" target="_blank">(.*?)</div>'
數(shù)據(jù)清洗
- 數(shù)據(jù)前后清洗
x.strip()
- 數(shù)據(jù)內(nèi)部清洗
x.replace(' ', '')
至此,所需的內(nèi)容已經(jīng)獲取到本地廊宪,爬蟲基本完成矾瘾。