網路爬蟲(1)-初始BeautifulSoup

網路爬蟲(1)-初始BeautifulSoup

來自專欄 產品也得懂點數據分析

今天這邊文章主要介紹一下利用python進行網路數據採集,後續會針對每個知識點進行詳細的分析

初見爬蟲

網頁是有一系列的圖像、聲音、視頻和文字組成的,網頁的展現是由瀏覽器完成的。瀏覽器就是代碼,而代碼是可以分解的,所以我們就可以利用python解析網頁,採集我們想要的數據。

讓我們來看看python是如何實現的

from urllib.request import urlopen html = urlopen(http://www.pmcaff.com/) print(html.read().decode(utf-8))

利用以上代碼我們可以將pmcaff首頁的代碼下載下來

認識BeautifulSoup

BeautifulSoup嘗試化平淡為神奇,它通過定位HTML標籤來格式化和組織複雜的網路信息,用簡單易用的Python對象為我們展示XML結構信息。

不過由於BS並不是pythpn的標準庫,所以需要自行安裝,現在最新的版本是BeautifulSoup4。推薦使用pip安裝,不懂的同學可自行百度。

讓BeautifulSoup Run一下

from urllib.request import urlopen from bs4 import BeautifulSoup html = urlopen(http://www.pmcaff.com/) bsObj = BeautifulSoup(html,html.parser) print(bsObj.head)

運行結果 輸出head標籤對應的內容

讓程序更穩定

面對網路不穩定,頁面更新等問題,很可能出現程序異常的問題,所以我們要對程序進行一些異常處理。大家可能覺得處理異常是一個比較麻煩的活,但在面對複雜網頁和任務的時候,無疑成為一個很好的代碼習慣。

網頁『404』、『500』等問題

try: html = urlopen(http://www.pmcaff.com/2221) except HTTPError as e: print(e)

返回的是空網頁

if html is None: print(沒有找到網頁)

目標標籤在網頁中缺失

try: #不存在的標籤 content = bsObj.nonExistingTag.anotherTag except AttributeError as e: print(沒有找到你想要的標籤) else: if content == None: print(沒有找到你想要的標籤) else: print(content)

實戰,取一篇我的文章的所有標題

練習文章鏈接 菜鳥一年

from urllib.request import urlopen from urllib.error import HTTPError from bs4 import BeautifulSoup def getTitle(url): try: html = urlopen(url) except HTTPError as e: return None try: bsObj = BeautifulSoup(html,html.parser) title = bsObj.body.h1 except AttributeError as e: return None return title title = getTitle(http://www.pmcaff.com/article/index/359314998689920?from=profile) if title == None: print(沒有找到你想要的標籤) else: print(title)

推薦閱讀:

嗨!送上一盤315晚會的瓜
紐約時報用數據可視化告訴你,美國黑人如何悲哀地規避了階層固化
kaggle比賽泰坦尼克號優秀項目翻譯
參考場景:銷量預測
用python建立房價預測模型|python數據分析建模實例

TAG:數據分析 | 產品 | beautifulsoup |