網路爬蟲(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 |