Python 爬蟲學習筆記之Regex_python

來源:互聯網
上載者:User

Regex的使用

想要學習 Python 爬蟲 , 首先需要瞭解一下Regex的使用,下面我們就來看看如何使用。

. 的使用這個時候的點就相當於一個預留位置,可以匹配任意一個字元,什麼意思呢?看個例子就知道

 import re  content = "helloworld"  b = re.findall('w.',content)  print b`

注意了,我們首先匯入了 re,這個時候大家猜一下輸出結果是什嗎?因為 . 相當於一個預留位置,所以理所當然的這個時候的輸出結果是 wo 。

* 的使用跟上面的 . 不同,* 可以匹配前一個字元任意次數,看個例子

content = "helloworldhelloworld" b = re.findall('w*',content) print b

這個時候的輸出結果是 ['', '', '', '', '', 'w', '', '', '', '', '', '', '', '', '', 'w', '', '', '', '', ''],可見是一個列表,長度和匹配的字串一致,遇到要匹配的字元就列印出來。

.* 的使用.* 是一種組合使用,它可以儘可能多的匹配內容,比如下面這個例子

content = "helloworldhelloworldworld" b = re.findall('he.*ld',content) print b

它會輸出 ['helloworldhelloworldworld'],它為什麼不只列印一個 helloworld,為什麼全部列印下來了?這就是一種貪心演算法,也就是說我要找到最長的那個合格內容。

.*? 的使用與 上面相反,這個符號會找到儘可能短的合格內容,然後放到一個列表中去,如下所示

content = 'xxhelloworldxxxxhelloworldxx' b = re.findall('xx.*?xx',content) print b

輸出的結果為 ['xxhelloworldxx', 'xxhelloworldxx'],可見,有個 xx 在前面好煩,怎麼才能去掉呢?很簡單,加個括弧即可,括弧加在哪?

content = 'xxhelloworldxxxxhelloworldxx' b = re.findall('xx(.*?)xx',content) print b

以上我們討論的都是內容不包含分行符號的情況,如果有了分行符號結果又會發生什麼變化呢?

content = '''xxhelloworld xx''' b = re.findall('xx(.*?)xx',content) print b

這個時候的輸出結果為一個空列表,那怎麼辦啊?如果我們寫網路爬蟲的時候,網頁原始碼肯定不止是一行啊,如果換一行我們就讀不出來了,那就好尷尬了,當然有解決辦法~

content = '''xxhelloworld xx''' b = re.findall('xx(.*?)xx',content,re.S) print b

這樣就可以了,還有一個非常方便的提取數位技巧,如下所示

content = '''xx123456 xx''' b = re.findall('(d+)',content,re.S) print b

在網頁原始碼中爬取圖片連結並下載

這篇文章中只是網路爬蟲的第一步,所以講解的也比較淺,所以現在我們先來利用Regex實現一個手動的網路爬蟲,什麼是手動的呢?就是我們自己把網頁原始碼複製下來,儲存在一個 txt 檔案中,然後利用Regex去過濾資訊,然後去下載。

首先我搜尋了一下 Linux 案頭,然後找到了如下一個網頁

右擊查看網路原始碼,按 ctrl+f 搜尋 img src 找到中間一部分進行複製,並且粘貼到一個 txt 檔案中去,

然後就可以利用我們上述的知識去提取我們想要的資訊,原始碼如下

import re import requests  f = open('source.txt', 'r')  html = f.read()  f.close()  pattern = '<img src="(.*?)"'  pic_url = re.findall(pattern, html, re.S) i = 0  for each in pic_url:    print 'Downloading :' + each    pic = requests.get(each)    fp = open('picture\\' + str(i) + '.jpg', 'wb')    fp.write(pic.content)    fp.close()    i = i + 1

首先開啟我們儲存網路原始碼的 txt檔案,進行讀取,關閉檔案流,然後就是利用Regex提取圖片連結,最後利用requests 中的 get() 方法進行圖片下載,注意這個 requests 不是Python 中內建的,我們需要下載指定的檔案,然後將其放入到 Python 的Lib 目錄下,此處下載,進入網站後,按ctrl+f 搜尋關鍵詞 requests 就可以看到如下頁面

,可以看出,我們下載的是 .whl 尾碼的檔案,手動將其改成 .zip 尾碼,然後解壓,就可以得到兩個目錄,將名為 requests 的目錄複寫粘貼到上面講的目錄即可使用。

好了介紹完了,我們去看下運行結果

 C:Python27python.exe E:/PythonCode/20160820/Spider.py Downloading:http://n1.itc.cn/img8/wb/smccloud/fetch/2015/07/04/112732422680200576.JPG Downloading :http://n1.itc.cn/img8/wb/smccloud/fetch/2015/07/04/112640070563900918.JPG Downloading :http://n1.itc.cn/img8/wb/smccloud/fetch/2015/07/04/112547718465744154.JPG Downloading :http://n1.itc.cn/img8/wb/smccloud/fetch/2015/07/04/112455366330382227.JPG Downloading :http://n1.itc.cn/img8/wb/smccloud/fetch/2015/07/04/112363014254719641.JPG Downloading :http://n1.itc.cn/img8/wb/smccloud/fetch/2015/07/04/112270662197888742.JPG Downloading :http://n1.itc.cn/img8/wb/smccloud/fetch/2015/07/04/112178310031994750.JPG Downloading :http://n1.itc.cn/img8/wb/smccloud/fetch/2015/07/04/112085957910403853.JPG  Process finished with exit code 0

這個時候就下載成功了,到我們的 picture 目錄下去查看下載的圖片

下載成功了。注意,自己找網頁原始碼實驗的時候,最好不要讓連結中帶有中文,否則可能會出現亂碼,由於我本身學習 Python 也才很短的時間,關於中文亂碼問題,應對起來還不是那麼得心應手,所以在此也就不再講解,本文暫時告以段落,有意見或疑問可留言或者私聊我。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.