1

兩種典型爬蟲:通用網絡爬蟲、聚焦網絡爬蟲

通用網絡爬蟲實現原理與過程:

  • 獲取初始的URL
  • 根據初始的URL爬取頁面并獲取新的URL
  • 將新的URL放到URL隊列中
  • 從URL隊列中讀取新的URL,并根據新的URL爬取網頁饼齿,同時從新網頁中獲取新的URL何缓,并重復上述爬取過程
  • 滿足爬蟲系統(tǒng)設置的停止條件時庸论,停止爬取

聚焦網絡爬蟲(有目的地進行爬日潞怼)實現原理與過程:

  • 定義和描述要爬取的目標

  • 獲取初始的URL

  • 根據初始的URL爬取頁面并獲取新的URL

  • 從新的URL中過濾掉與爬取目標無關的鏈接梅肤,同時將已爬取的URL地址存放到一個URL列表中,用于去重和判斷爬取的進程
    將過濾后的鏈接放到URL隊列中

  • 從URL隊列中沐序,根據搜索算法琉用,確定URL的優(yōu)先級堕绩,并確定下一步要爬取的URL地址

  • 從下一步要爬取的URL地址中,讀取新的URL邑时,然后依據新的URL地址爬取網頁奴紧,并重復上述爬取過程

  • 滿足系統(tǒng)中設置的停止條件,或無法獲取新的URL地址時刁愿,停止爬行
    爬行策略

    主要有深度優(yōu)先绰寞、廣度優(yōu)先到逊、最佳優(yōu)先等爬行策略铣口。

身份識別

一般的,爬蟲對網頁進行爬取的時候觉壶,會通過HTTP請求中的User Agent字段告知自己的身份信息脑题。一般爬蟲訪問一個網站的時候,首先會根據該站點下的Robots.txt文件來確定可以爬取的網頁范圍铜靶,Robots協(xié)議是需要網絡爬蟲共同遵守的協(xié)議叔遂,對于一些禁止的URL地址,網絡爬蟲則不應該爬取訪問争剿。

爬蟲方法

本篇筆記主要記錄利用python爬取數據時最常用的兩個方法庫:Requests庫和Scrapy庫已艰。

Requests

#常用的模版:

import requests
url = ''
def geturl(url):
    try:
        r = requests.get(url,timeout = 10)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        print(r.text[:1000])//return r.text[:1000]
    except:
        print('error')

Requests主要方法

image
# 常用命令:
requests.get()      
requests.head()     #當網頁比較大的時候,先獲取它的頭部信息

# 一般用法:
requests.get/head('網址',**kwargs)
kv = 字典
params = kv         #用于網址蚕苇?后面添加內容
headers = kv        #用于改變爬蟲的user-agent
timeout = 10        

image

Requests屬性

image
r.content       #用于當要以二進制形式存儲的時候

Re庫的基本使用

import re #主要用于字符串匹配

re庫主要使用raw string類型(原生字符串類型)
如:r'[1-9],{5}'
原生字符串即不包含轉義符的字符串.
Re庫主要功能函數

函數 說明
re.seach() 在一個字符串中搜索匹配正則表達式的第一個位置,返回match對象.
re.match() 從一個字符串的開始位置起匹配正則表達式,返回match對象.
re.findall() 搜索字符串,以列表類型返回全部能匹配的字符串.
re.split() 將一個字符串按照正則表達式結果進行分割,返回列表類型.
re.finditer() 搜索字符串,返回一個匹配結果的迭代類型,每一個迭代元素是match對象.
re.sub() 在一個字符串中替換所有匹配正則表達式的子串,返回替換后的字符串.

re.search(pattern,string,flags=0)

  • pattern:正則表達式的字符串或原生字符串表示
  • string:待匹配字符串
  • flags:正則表達式使用的控制標記
常用標記 說明
re.I re.IGNORECASE 忽略正則表達式的大小寫,[A-Z]能夠匹配小寫字符
re.M re.MULTILINE 正則表達式中的^操作符能夠將給定字符串的每行當作匹配開始
re.S re.DOTALL 正則表達式中的.操作符能夠匹配所有字符,默認匹配所有除換行符外的所有字符

import re
match=re.search(r'[1-9]\d{5}','BIT100081')
if match:
    print(match.group(0))
#輸出 100081

type(match)#輸出 _sre.SRE_Match

match就是一次匹配的結果.

match對象的屬性 說明
.string 待匹配的文本
.re 匹配時使用的pattern對象(正則表達式)
.pos 正則表達式搜索文本的開始位置
.endpos 正則表達式搜索文本的將結束為止
match對象的方法 說明
.group(0) 獲得匹配后的字符串
.start() 匹配字符串在原始字符串的開始位置
.end() 匹配字符串在原始字符串的結束為止
.span() 返回(.start(),.end())

Re庫默認采用貪婪匹配,即輸出匹配最長的子串.

match=re.search(r'PY.*N','PYANBNCNDN')
match.group(0)
#貪婪匹配哩掺,輸出PYANBNCNDN

match=re.search(r'PY.*?N','PYANBNCNDN')#加?號后,為最小匹配涩笤,輸出PYAN
match.group(0)
最小匹配操作符 使用說明
*? 前一個字符0次或無限次擴展,最小匹配
+? 前一個字符1次或無限次擴展,最小匹配
?? 前一個字符0次或1次擴展,最小匹配
{m,n}? 擴展前一個字符m至n次(含n),最小匹配

事實上,操作符后加"?",就可以獲得匹配結果.

Scrapy

常用命令

image
  1. scrapy startproject name
    cd name 
    scrapy genspider sname           #創(chuàng)建工程嚼吞,spider模版
    
  2. 編寫spider里的.py內容              #進行內容爬取和信息處理
    
    #def parse就是對get到的Response進行處理
    
    
  3. 編寫pipelines.py文件          #對所得到的信息做進一步處理
    
  4. 修改setting.py                #對爬蟲的性能做進一步優(yōu)化
    
  5. scrapy crawl name                #運行爬蟲
    

    ?


爬蟲中的注意點

  • 對于url網址,不必在意里面一些復雜的內容蹬碧,可以直接忽略舱禽,找?guī)讉€網址的共同點

  • 獲取到html信息后,可以用beautifulsoup進行形式解析處理恩沽;也可以直接進行搜索+re

  • eval()#可以去引號
    
  • url里必須都是字符串形式

  • 正則表達式中“兩者選其一并且可無限擴充”用

    [abc]*
    
  • 不要拘泥于一個信息源(一個網站)誊稚,選擇最合適爬蟲的網站

  • 只要是在爬取時、循環(huán)時一定要異常處理罗心!

  • 如果返回值是列表里伯,而且只有一個元素或者有了特定要選取的元素⌒牛可以直接在后面添加[0]

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末俏脊,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子肤晓,更是在濱河造成了極大的恐慌爷贫,老刑警劉巖认然,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異漫萄,居然都是意外死亡卷员,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門腾务,熙熙樓的掌柜王于貴愁眉苦臉地迎上來毕骡,“玉大人,你說我怎么就攤上這事岩瘦∥次祝” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵启昧,是天一觀的道長叙凡。 經常有香客問我,道長密末,這世上最難降的妖魔是什么握爷? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮严里,結果婚禮上新啼,老公的妹妹穿的比我還像新娘。我一直安慰自己刹碾,他們只是感情好燥撞,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著教硫,像睡著了一般叨吮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瞬矩,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天茶鉴,我揣著相機與錄音,去河邊找鬼景用。 笑死涵叮,一個胖子當著我的面吹牛,可吹牛的內容都是我干的伞插。 我是一名探鬼主播割粮,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼媚污!你這毒婦竟也來了舀瓢?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤耗美,失蹤者是張志新(化名)和其女友劉穎京髓,沒想到半個月后航缀,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡堰怨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年芥玉,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片备图。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡灿巧,死狀恐怖,靈堂內的尸體忽然破棺而出揽涮,到底是詐尸還是另有隱情抠藕,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布绞吁,位于F島的核電站幢痘,受9級特大地震影響唬格,放射性物質發(fā)生泄漏家破。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一购岗、第九天 我趴在偏房一處隱蔽的房頂上張望汰聋。 院中可真熱鬧,春花似錦喊积、人聲如沸烹困。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽髓梅。三九已至,卻和暖如春绎签,著一層夾襖步出監(jiān)牢的瞬間枯饿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工诡必, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奢方,地道東北人。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓爸舒,卻偏偏與公主長得像蟋字,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子扭勉,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內容