爬蟲基礎:使用正則匹配擷取網頁中的指定內容

來源:互聯網
上載者:User

本文以爬取國家地理中文網中的旅行類中的圖片為例,示範爬蟲具備的準系統。 給定初始地址

國家地理中文網 : http://www.ngchina.com.cn/travel/ 擷取並分析網頁內容

a、分析網頁結構,確定想要的內容部分

我們開啟網頁,右擊選擇《顯示網頁原始碼》查看網頁結構,下面是我截取的部分

我們會發現,圖片類型的資料都放在< img >標籤 的scr=”“內,我們只要找出這些標籤,從中提取我們想要的串連即可完成我們的預期。

b、擷取網頁內容

想要提取內容,首先我們要向該伺服器發起請求,拿取該檔案,然後分析提取其中的圖片資訊,並整理儲存資料

筆者使用的Python3.6,擷取網頁內容常用的有兩種方式:requests和urllib(合并了python2中的urllib和urllib2),關於擷取網頁內容,請參考這篇:爬蟲基礎:python擷取網頁內容

現在,我們定義一個用來擷取網頁的方法 crawl()

import requestsdef crawl(url, headers):    with requests.get(url=url, headers=headers) as response:        # 讀取response裡的內容,並轉碼        data = response.content.decode()        return data

調用該方法擷取網頁內容:

# 擷取指定網頁內容url = 'http://www.ngchina.com.cn/travel/'headers = {'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Mobile Safari/537.36'}content = crawl(url, headers)print(content)
編寫Regex,匹配圖片內容
import re# 編寫Regex,匹配圖片內容pattern = r'src="(.*?\.jpg)'complie_re = re.compile(pattern)# 匹配所有符合Regex的內容imgList = complie_re.findall(content)# 針對匹配出來的內容,可能需要進一步處理、篩選才能最終得到我們需要的資料,例如新的link,我們可以去重之後放入到新的url隊列中去,等待下一次抓取# 總之,根據需求來處理# 去重imgList = list(set(imgList))# 去除不合格的圖片imgList = [img for img in imgList if img.startswith('http')]# 輸出for img, i in zip(imgList, range(len(imgList))):    print('{}:{}'.format(i, img))'''0:http://image.ngchina.com.cn/2018/0428/20180428110510703.jpg1:http://image.ngchina.com.cn/2018/0130/20180130032001381.jpg2:http://image.ngchina.com.cn/2018/0424/20180424010923371.jpg...37:http://image.ngchina.com.cn/2018/0419/20180419014117124.jpg38:http://image.nationalgeographic.com.cn/2017/1127/20171127121516360.jpg'''

這樣我們就抓取了給定地址中的圖片資訊了,我們選取其中一張:

http://image.ngchina.com.cn/2018/0428/20180428110510703.jpg

入庫並進行下一輪抓取

在我們抓取到指定內容後,我們可以將其存在資料庫儲存;如果是link型的抓取,我們可以建立url隊列,將指定的url中的新的link加入到url隊列來,然後一輪一輪的遍曆抓取,對於隊列url的處理,需要根據具體需求採用相應的策略,以完成相應的任務工作。更多爬蟲資訊可以參考:初始爬蟲。 補充:

在我們編寫Regex時,可以使用線上Regex工具,快速看到匹配結果:菜鳥正則工具,這個地址中還有一些常用的,已經寫好的Regex,如電話、QQ號、網址、郵箱等等,非常好用。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.