日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

以前在學(xué)校做科研都是直接利用網(wǎng)上共享的一些數(shù)據(jù),就像我們經(jīng)常說的dataset、beachmark等等。但是,對于實際的工業(yè)需求來說,爬取網(wǎng)絡(luò)的數(shù)據(jù)是必須的并且是首要的。最近在國內(nèi)一家互聯(lián)網(wǎng)公司實習(xí),我的mentor交給我的第一件事就是去網(wǎng)絡(luò)上爬取數(shù)據(jù),并對爬取的數(shù)據(jù)進行相關(guān)的分析和解析。

回到頂部

1.利用urllib2對指定的URL抓取網(wǎng)頁內(nèi)容

  網(wǎng)絡(luò)爬蟲(Web Spider),顧名思義就是將龐大的互聯(lián)網(wǎng)看做是一張大網(wǎng),而我們要做的就是用代碼去構(gòu)造一個類似于爬蟲的實體,在這張大網(wǎng)上爬取我們需要的數(shù)據(jù)。

  所謂網(wǎng)頁抓取,就是把URL地址中指定的網(wǎng)絡(luò)資源從網(wǎng)絡(luò)流中讀取出來,保存到本地。類似于使用程序模擬IE瀏覽器的功能,把URL作為HTTP請求的內(nèi)容發(fā)送到服務(wù)器端, 然后讀取服務(wù)器端的響應(yīng)資源。Python中提供了專門抓取網(wǎng)絡(luò)的組件urllib和urllib2。

  最簡單的抓取網(wǎng)絡(luò)的Python代碼,四行就可以搞定:

1 import urllib2 
2 response = urllib2.urlopen('http://www.toutiao.com/') 
3 html = response.read() 
4 print html

私信小編01 領(lǐng)取完整項目代碼!

  顯示抓取的結(jié)果:

  

花了三天時間,終于把網(wǎng)絡(luò)爬蟲和正則表達式做了個總結(jié)

 

  我們可以打開百度主頁,右擊,選擇查看源代碼(火狐OR谷歌瀏覽器均可),會發(fā)現(xiàn)也是完全一樣的內(nèi)容。也就是說,上面這四行代碼將我們訪問百度時瀏覽器收到的代碼們?nèi)看蛴×顺鰜?。這就是一個最簡單的利用urllib2進行網(wǎng)頁爬取的例子。

  當(dāng)然,有的網(wǎng)站為了防止爬蟲,可能會拒絕爬蟲的請求,這就需要我們來修改http中的Header項了。還有一些站點有所謂的反盜鏈設(shè)置,其實說穿了很簡單,就是檢查你發(fā)送請求的header里面,referer站點是不是他自己,所以我們只需要像把headers的referer改成該網(wǎng)站即可。有關(guān)Header項的修改請轉(zhuǎn)至下邊的鏈接查看,里邊詳細地介紹了Header的修改、Cookie和表單的處理,等等。

  1)urllib2的使用細節(jié)和抓站技巧

  2)用Python爬蟲抓站的一些技巧總結(jié)

  3)用python寫爬蟲,去爬csdn的內(nèi)容,完美解決 403 Forbidden

  4)用Python爬取網(wǎng)頁或下載文檔的登陸問題

  5)用python2和python3偽裝瀏覽器爬取網(wǎng)頁

  6)Python專題教程:抓取網(wǎng)站,模擬登陸,抓取動態(tài)網(wǎng)頁

回到頂部

2. 使用正則表達式過濾抓取到的網(wǎng)頁信息

  如果說網(wǎng)頁爬蟲爬取的網(wǎng)頁信息是數(shù)據(jù)大海的話,那么正則表達式就是我們進行“大海撈針”的工具。

  首先聲明一點,正則表達式不是Python的語法,并不屬于Python,其他的語言中也同樣支持正則表達式的使用。具體來說,它是一種強大的字符串匹配和處理規(guī)則。

回到頂部

2.1 正則表達式介紹

  下圖展示了使用正則表達式進行匹配的流程:

  

花了三天時間,終于把網(wǎng)絡(luò)爬蟲和正則表達式做了個總結(jié)

 

  下圖列出了Python支持的正則表達式元字符和語法:

2.1.1 正則表達式元字符

  

花了三天時間,終于把網(wǎng)絡(luò)爬蟲和正則表達式做了個總結(jié)

 

2.1.2 數(shù)量詞的貪婪模式與非貪婪模式

  正則表達式通常用于在文本中查找匹配的字符串。貪婪模式,總是嘗試匹配盡可能多的字符;非貪婪模式則相反,總是嘗試匹配盡可能少的字符。Python里數(shù)量詞默認是貪婪的。

  例如:正則表達式"ab*"如果用于查找"abbbc",將找到"abbb"。而如果使用非貪婪的數(shù)量詞"ab*?",將找到"a"。

2.1.3 反斜杠的問題

  與大多數(shù)編程語言相同,正則表達式里使用""作為轉(zhuǎn)義字符,這就可能造成反斜杠困擾。假如你需要匹配文本中的字符"",那么使用編程語言表示的正則表達式里將需要4個反斜杠"\\":第一個和第三個用于在編程語言里將第二個和第四個轉(zhuǎn)義成反斜杠,轉(zhuǎn)換成兩個反斜杠\后再在正則表達式里轉(zhuǎn)義成一個反斜杠用來匹配反斜杠。這樣顯然是非常麻煩的。

  Python里的原生字符串很好地解決了這個問題,這個例子中的正則表達式可以使用r"\"表示。同樣,匹配一個數(shù)字的"\d"可以寫成r"d"

回到頂部

2.2 Python的re模塊

  Python通過re模塊提供對正則表達式的支持。

  使用re的一般步驟是:

  Step1:先將正則表達式的字符串形式編譯為Pattern實例。

  Step2:然后使用Pattern實例處理文本并獲得匹配結(jié)果(一個Match實例)。

  Step3:最后使用Match實例獲得信息,進行其他的操作。

  一個使用Python的re模塊進行正則表達式匹配的例子:

  1. # -*- coding: utf-8 -*- #一個簡單的re實例,匹配字符串中的hello字符串 #導(dǎo)入re模塊 import re # 將正則表達式編譯成Pattern對象,注意hello前面的r的意思是“原生字符串” pattern = re.compile(r'hello') # 使用Pattern匹配文本,獲得匹配結(jié)果,無法匹配時將返回None match1 = pattern.match('hello world!') match2 = pattern.match('helloo world!') match3 = pattern.match('helllo world!') #如果match1匹配成功 if match1: # 使用Match獲得分組信息 print match1.group() else: print 'match1匹配失?。?#39; #如果match2匹配成功 if match2: # 使用Match獲得分組信息 print match2.group() else: print 'match2匹配失??!' #如果match3匹配成功 if match3: # 使用Match獲得分組信息 print match3.group() else: print 'match3匹配失?。?#39;   

  輸出結(jié)果:

    hello

    hello

    match3匹配失??!

  當(dāng)然,也可以省略編譯pattern的過程,如下所示:

 

# -*- coding: utf-8 -*- 
#一個簡單的re實例,匹配字符串中的hello字符串 
import re 
 
m = re.match(r'hello', 'hello world!') 
print m.group() 

  除了match以外,Python中還提供了其他的匹配模式,可以針對不同的環(huán)境和用途來選擇不同的匹配模式?! ?/p>

  1)match:只從字符串的開始與正則表達式匹配,匹配成功返回matchobject,否則返回none;
  2)search:將字符串的所有字串嘗試與正則表達式匹配,如果所有的字串都沒有匹配成功,返回none,否則返回matchobject;(re.search相當(dāng)于perl中的默認行為)

  3)findall:匹配所有匹配成功的結(jié)果。

  詳細的使用細則,可以查看下邊的內(nèi)容:

  1)Python正則表達式的七個使用范例

  2)Python中正則表達式教程

  當(dāng)然,如果你覺得使用正則表達式太繁瑣的話,Python提供了BeautifulSoup插件來取代正則表達式,進行網(wǎng)頁的解析。想了解有關(guān)BeautifulSoup方面的知識,請移至下邊鏈接:

  Python抓取網(wǎng)頁&批量下載文件方法(正則表達式+BeautifulSoup)

回到頂部

2.3 Python正則表達式匯總

  2.3.1 正則表達式模式

  模式字符串使用特殊的語法來表示一個正則表達式:

  字母和數(shù)字表示他們自身。一個正則表達式模式中的字母和數(shù)字匹配同樣的字符串。

  多數(shù)字母和數(shù)字前加一個反斜杠時會擁有不同的含義。

  標點符號只有被轉(zhuǎn)義時才匹配自身,否則它們表示特殊的含義。

  反斜杠本身需要使用反斜杠轉(zhuǎn)義。

  由于正則表達式通常都包含反斜杠,所以你最好使用原始字符串來表示它們。模式元素(如 r'/t',等價于'//t')匹配相應(yīng)的特殊字符。

  下表列出了正則表達式模式語法中的特殊元素。如果你使用模式的同時提供了可選的標志參數(shù),某些模式元素的含義會改變。

模式描述^匹配字符串的開頭$匹配字符串的末尾。.匹配任意字符,除了換行符,當(dāng)re.DOTALL標記被指定時,則可以匹配包括換行符的任意字符。[...]用來表示一組字符,單獨列出:[amk] 匹配 'a','m'或'k'[^...]不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。re*匹配0個或多個的表達式。re+匹配1個或多個的表達式。re?匹配0個或1個由前面的正則表達式定義的片段,非貪婪方式re{ n} re{ n,}精確匹配n個前面表達式。re{ n, m}匹配 n 到 m 次由前面的正則表達式定義的片段,貪婪方式a| b匹配a或b(re)G匹配括號內(nèi)的表達式,也表示一個組(?imx)正則表達式包含三種可選標志:i, m, 或 x 。只影響括號中的區(qū)域。(?-imx)正則表達式關(guān)閉 i, m, 或 x 可選標志。只影響括號中的區(qū)域。(?: re)類似 (...), 但是不表示一個組(?imx: re)在括號中使用i, m, 或 x 可選標志(?-imx: re)在括號中不使用i, m, 或 x 可選標志(?#...)注釋.(?= re)前向肯定界定符。如果所含正則表達式,以 ... 表示,在當(dāng)前位置成功匹配時成功,否則失敗。但一旦所含表達式已經(jīng)嘗試,匹配引擎根本沒有提高;模式的剩余部分還要嘗試界定符的右邊。(?! re)前向否定界定符。與肯定界定符相反;當(dāng)所含表達式不能在字符串當(dāng)前位置匹配時成功(?> re)匹配的獨立模式,省去回溯。w匹配字母數(shù)字W匹配非字母數(shù)字s匹配任意空白字符,等價于 [tnrf].S匹配任意非空字符d匹配任意數(shù)字,等價于 [0-9].D匹配任意非數(shù)字A匹配字符串開始Z匹配字符串結(jié)束,如果是存在換行,只匹配到換行前的結(jié)束字符串。cz匹配字符串結(jié)束G匹配最后匹配完成的位置。b匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, 'erb' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。B匹配非單詞邊界。'erB' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。n, t, 等.匹配一個換行符。匹配一個制表符。等1...9匹配第n個分組的子表達式。10匹配第n個分組的子表達式,如果它經(jīng)匹配。否則指的是八進制字符碼的表達式。

  2.3.2 正則表達式實例

  字符匹配:

實例描述python匹配 "python".

  字符類:

實例描述[Pp]ython匹配 "Python" 或 "python"rub[ye]匹配 "ruby" 或 "rube"[aeiou]匹配中括號內(nèi)的任意一個字母[0-9]匹配任何數(shù)字。類似于 [0123456789][a-z]匹配任何小寫字母[A-Z]匹配任何大寫字母[a-zA-Z0-9]匹配任何字母及數(shù)字[^aeiou]除了aeiou字母以外的所有字符[^0-9]匹配除了數(shù)字外的字符

  特殊字符類:

實例描述.匹配除 "n" 之外的任何單個字符。要匹配包括 'n' 在內(nèi)的任何字符,請使用象 '[.n]' 的模式。d匹配一個數(shù)字字符。等價于 [0-9]。D匹配一個非數(shù)字字符。等價于 [^0-9]。s匹配任何空白字符,包括空格、制表符、換頁符等等。等價于 [ fnrtv]。S匹配任何非空白字符。等價于 [^ fnrtv]。w匹配包括下劃線的任何單詞字符。等價于'[A-Za-z0-9_]'。W匹配任何非單詞字符。等價于 '[^A-Za-z0-9_]'。

分享到:
標簽:爬蟲 網(wǎng)絡(luò)
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定