如何使用 Python和BeautifulSoup 爬取網站

2020-12-26 騰訊網

作者丨Justin Yek

譯者丨平川

網際網路上的信息如此之多,任何人窮其一生也無法全部消化吸收。你需要的不是訪問這些信息,而是一種可伸縮的方式,可以用來收集、組織和分析這些信息。你需要的是 Web 爬取。Web 爬取可以自動提取數據,並以一種讓你可以輕鬆理解的格式顯示出來。Web 爬取可以用於許多場景,但本教程將重點介紹它在金融市場中的應用。

網際網路上的信息如此之多,任何人窮其一生也無法全部消化吸收。你需要的不是訪問這些信息,而是一種可伸縮的方式,可以用來收集、組織和分析這些信息。

你需要的是 Web 爬取。

Web 爬取可以自動提取數據,並以一種讓你可以輕鬆理解的格式顯示出來。Web 爬取可以用於許多場景,但本教程將重點介紹它在金融市場中的應用。

如果你是一名狂熱的投資者,每天獲取收盤價可能是一件比較痛苦的事情,尤其是當你需要的信息需要查看多個網頁才能找到的時候。我們將通過構建一個網絡爬取器,從網際網路上自動檢索股票指數,簡化數據提取。

準 備

我們將使用 Python 作為爬取語言,並使用一個簡單而強大的庫 BeautifulSoup。

對於 Mac 用戶而言,OS X 預裝了 Python。打開終端,輸入 python --version。你應該可以看到 Python 的版本是 2.7.x。

對於 Windows 用戶,請通過官方網站安裝 Python。

接下來,我們需要使用 pip(一個 Python 包管理工具)獲取 BeautifulSoup 庫。

在終端輸入:

注意:如果你運行上述命令失敗,試下在每一行前面加上 sudo。

基本概念

在一頭扎進代碼之前,讓我們先了解下 HTML 的基本概念和一些爬取規則。

HTML 標籤

如果你已經了解了 HTML 標籤,大可以跳過這部分。

這是 HTML 頁面的基本語法。每個服務於網頁裡的一個塊:

:HTML 文檔必須以類型聲明開始。

HTML 文檔包含在和之間。

HTML 文檔的 meta 和 script 聲明位於和之間。

HTML 的可視部分位於和標籤之間。

標題的定義通過標籤 到 。

段落使用

標籤定義。

其他有用的標籤還有超連結標籤、表格標籤、表格行標籤、表格列標籤。

此外,HTML 標籤有時帶有 id 或 class 屬性。id 屬性為 HTML 標籤指定一個惟一的 id,並且該值在 HTML 文檔中必須是惟一的。class 屬性用於為具有相同 class 的 HTML 標籤定義相同的樣式。我們可以使用這些 id 和 class 幫助定位我們想要的數據。

要了解關於 HTML 標籤、 id 和 class 的信息,請查閱 W3Schools 教程。

爬取規則

你應該在爬取之前檢查網站的條款和限制。請仔細閱讀關於合法使用數據的聲明。通常,你收集的數據不應用於商業目的。

用你的程序從網站請求數據時不要過激(也稱為濫發),因為這可能會對網站造成破壞。確保你的程序以一種合理的方式運行(即表現得像個人)。每秒請求一個頁面是很好的做法。

網站的布局可能會不時發生變化,所以一定要重新訪問網站,並根據需要重寫代碼。

查看頁面

作為例子,讓我們看一個來自 Bloomberg Quote 網站的頁面。

作為關注股票市場的人,我們希望從這個頁面上獲取指數名稱(標準普爾 500)及其價格。首先,右鍵單擊並打開瀏覽器檢查器來查看網頁。

嘗試把滑鼠懸停在價格上,你應該可以看到一個藍框。單擊它,就可以在瀏覽器控制臺中選擇相關的 HTML。

從中我們可以看到,價格位於多層 HTML 標籤之中,即

類似地,如果你將滑鼠懸停並單擊名稱「S&P 500 Index」,就會看到它位於

和中。

現在,我們已經藉助 class 標籤知道了數據的唯一位置。

進入代碼

現在,我們已經知道我們想要的數據在哪,我們可以開始編寫 Web 爬取器了。現在,打開編輯器。

首先,我們需要導入我們將要用到的庫。

接下來,聲明一個保存頁面 URL 的變量。

然後,使用 Python urllib2 獲取上述 URL 指向的 HTML 頁面。

最後,將頁面解析成 BeautifulSoup 的格式,這樣我們就可以使用 BeautifulSoup 處理它了。

現在,我們有一個包含頁面 HTML 的變量 soup。從這裡開始我們可以編寫提取數據的代碼了。

還記得我們需要的數據所獨有的標籤層次嗎?BeautifulSoup 可以幫助我們進入這些層,並使用 find() 提取內容。在本例中,由於 HTML class 屬性的名稱在這個頁面上是惟一的,所以我們可以簡單地查詢

在找到標籤之後,我們就可以通過獲取其 text 屬性來獲取數據。

類似地,我們也可以獲取指數價格。

運行程序,你應該可以看到它給出了標準普爾 500 指數的價格。

導出到 Excel CSV

現在我們要保存獲取到的數據了。Excel 逗號分隔格式是一個不錯的選擇。它可以在 Excel 中打開,這樣你就可以看到數據並輕鬆地處理它。

但是首先,我們必須導入 Python csv 模塊和 datetime 模塊來獲取記錄日期。將以下代碼插入導入部分。

在代碼底部添加將數據寫入 CSV 文件的代碼。

現在運行程序,你應該就可以導出到 index.csv 文件,然後你就可以用 Excel 打開,其中應該包含如下這行數據。

這樣,你每天運行下這個程序就可以輕鬆獲得標準普爾 500 指數的價格了,就不用在網站上翻來翻去了。

進一步探究(高級用法)

多指數

對你而言,爬取一個指數並不夠用,對嗎?我們可以嘗試下同時提取多個指數。

首先,將 quote_page 改成 URL 數組。

然後,將數據提取代碼放入一個 for 循環,它會逐個處理數組中的 URL 並將所有數據以元組的形式保存到變量 data 中。

修改數據保存部分,逐行保存數據,

運行這個程序,應該就可以同時提取兩個指數了。

高級爬取技術

BeautifulSoup 非常簡單,適合於小規模 Web 爬取。但是,如果你對更大規模的數據爬取感興趣,就應該考慮下下面這些選項:

Scrapy 是一個非常強大的 Python 爬取框架。

嘗試在你的代碼中集成一些公共 API。數據檢索的效率會遠遠高於爬取網頁。例如,看看 Facebook Graph API ,它可以幫助你獲得 Facebook 網頁上沒有顯示的隱藏數據。

當數據變大時,考慮使用類似 MySQL 這樣的資料庫後端來存儲數據。

採用 DRY 方法

DRY 的意思是「不要重複你自己」,試著像這個人一樣自動化你的日常任務。還可以考慮其他一些有趣的項目,比如跟蹤 Facebook 上朋友的活動時間(當然要徵得他們的同意),或者在論壇上列出一些話題,並嘗試自然語言處理(這是目前人工智慧的熱門話題)!如果有任何問題,請在下面留言。

https://medium.com/free-code-camp/how-to-scrape-websites-with-python-and-beautifulsoup-5946935d93fe

今日薦文

從木工活兒到戶外大冒險,程式設計師有多斜槓?你根本想像不到丨二叉樹視頻

點個在看少個 bug

相關焦點

  • 用python分析上海二手房數據,用幾十行代碼爬取大規模數據!
    2)pip3 install requests3)pip3 install lxml二、原始碼1、導入beautifulsoup和requests庫# -*- coding: utf-8 -*-from bs4 import BeautifulSoupimport
  • Python
    最近,在數據挖掘課,要交課設了,打算做一個通過機器學習進行新聞分類,首先要有大量的文本(新聞),去做訓練,並通過爬蟲爬取大量的新聞一,思路如下:0.首先確定獲取數據的網站1.通過BeautifulSoup來切取連結2.
  • python爬蟲系列教程,用python爬取全國範圍內的KFC店地址
    下面羽憶教程教你會python爬取全國範圍內的KFC店地址,這是一篇python爬蟲系列的教程,簡單又能讓人填飽肚子。python爬蟲介紹python發展至今,python爬蟲已經成為了一種職業,因為其可以幫助企業快速得到網絡上的最新信息,但是為什麼很多寫python爬蟲的程式設計師會面臨牢獄之災呢?
  • python爬蟲入門實戰!爬取博客文章標題和連結!
    最近有小夥伴和我留言想學python爬蟲,那麼就搞起來吧。準備階段爬蟲有什麼用呢?舉個最簡單的小例子,你需要《戰狼2》的所有豆瓣影評。最先想的做法可能是打開瀏覽器,進入該網站,找到評論,一個一個複製到文本中,保存,翻頁,接著複製,直到翻到最後一頁。
  • Excel與Python爬取數據,兩者PK,誰優誰劣?
    小夥伴們大家好~Excel和python作為當前兩款比較火的數據分析處理工具,兩者之間有很多共性也有很大的區別。今天一起來看下在抓取網頁數據這塊,兩者有什麼異同點。如果用python爬取上面的網頁,只需要三行代碼,如下圖所示:這裡沒有用BS4,xpath等網頁解析方法,pandas提供了read_html的功能,可以直接獲取網頁數據。與Excel相比,python的優勢在於效率與便捷性。
  • Python網絡爬蟲
    大數據成為當今時代的熱門話題之一,在數據量爆發增長的網際網路時代,網站與用戶溝通實質為數據的交換。如果大量的數據得以分析,我們能夠對事件的看法,解決方案做出更好的決策。而網絡爬蟲技術,則是大數據分析領域的第一個環節。(二):能從網絡上爬取什麼數據?
  • Python爬取招聘網站數據並做數據可視化
    前言 本文的文字及圖片來源於網絡,僅供學習、交流使用,不具有任何商業用途,如有問題請及時聯繫我們以作處理。 基本開發環境 Python 3.6 Pycharm 相關模塊使用 爬蟲模塊 詞雲模塊
  • 如何開始寫你的第一個python腳本——簡單爬蟲入門!
    好多朋友在入門python的時候都是以爬蟲入手,而網絡爬蟲是近幾年比較流行的概念,特別是在大數據分析熱門起來以後,學習網絡爬蟲的人越來越多,哦對,現在叫數據挖掘了!其實,一般的爬蟲具有2個功能:取數據和存數據!好像說了句廢話。。。
  • Python基礎進階之海量表情包多線程爬蟲功能的實現
    這篇文章主要介紹了Python基礎進階之海量表情包多線程爬蟲,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑑價值,需要的朋友可以參考下一、前言在我們日常聊天的過程中會使用大量的表情包
  • Python開發簡單爬蟲【學習資料總結】
    ;另一方面,會將新的URL補充進URL管理器,若有URL管理器中含有新的URL,則重複上述步驟,直到爬取完所有的URL 6、最後,調度器會調動應用的方法,將價值數據輸出到需要的格式。
  • 爬取B站20萬+條彈幕,我學會了如何成為B站老司機
    如何快速成為B站彈幕老司機?本文就通過Python爬取B站不同UP主近20萬+彈幕數據進行分析,全文共分為兩個部分,第一部分為不同分區up主的彈幕分析,第二部分為Python爬取B站彈幕技術分析。>可以看到,7月最熱的5個鬼畜視頻中,兩個是基於讓子彈飛製作,兩個是基於羅翔製作,為了採集更多的彈幕數據,本文選擇月初發布的基於羅翔x愛情公寓的鬼畜視頻【張三史上最慘4分鐘】,共爬取到近4萬條彈幕數據並製作詞雲圖如下來到鬼畜區肯定就少不了好活當賞和下次一定,當然有張三的地方就有
  • 用Python爬蟲爬取去哪兒4500個熱門景點,看看國慶不能去哪兒
    1.百度的地圖API和echarts這次正好爬的是數據,我決定用數據的好基友——圖表來輸出我爬取的數據,也就是說我要用爬取的景點銷量以及景點的具體位置來生成一些可視化數據。再詳細一點講呢,就好比米醬的小說寫完啦!但她還想把小說出成書,可是怎麼出書捏?
  • python爬蟲之selenium抓取淘寶商品信息
    selenium可以模擬用戶執行的操作,是一個自動化測試工具,我們可以根據自己的需要預先設置selenium按照我們設置好的步驟進行操作,而在爬蟲中我們使用selenium可以解決javascript動態執行代碼的問題,不用費心去解析js如何運行,運行後產生的信息,直接使用selenium模擬實際登陸網頁的操作,獲取我們需要的信息進行分析,成功幫我們避開一系列複雜的通信過程,方便使用者。
  • Python網絡爬蟲(第二篇)
    靜態網頁:在網站設計中,純粹的HTML格式的網頁就稱為靜態網頁。在網絡爬蟲中,靜態網頁的數據都呈現在HTML代碼中,所以比較容易獲取。動態網頁是使用AJAX動態加載網頁數據不一定出現在HTML代碼中,這就相比於靜態網頁,爬取動態網頁的數據上升了一個難度。二、為什麼爬取靜態網頁數據比較簡單?
  • python爬蟲整個體系闡述,基礎到進階
    這裡為大家聊聊python爬蟲的整個體系。或許你會知道該怎麼一點點去學習。>通用網絡爬蟲:爬取對象從一些種子 URL 擴充到整個 Web,搜尋引擎幹的就是這些事· 垂直網絡爬蟲:針對特定領域主題進行爬取,比如專門爬取小說目錄以及章節的垂直爬蟲· 增量網絡爬蟲:對已經抓取的網頁進行實時更新
  • Python 爬取 B 站 5000 條視頻,揭秘為何千萬人為它流淚!
    到了哪吒成魔要殺父親、跪別父母、因為宿命不得以和敖丙為敵時,影院裡突然安靜下來。或許是編者淚點低,看著哪吒和李婧夫婦哭,自己也忍不住跟著哭。人們喜歡《哪吒》,不僅是因為它的特效,更是因為裡面的親情友情乃至師生情,是我們每個人的嚮往啊......本期文章,程序人生特邀作者Yura爬取B站 5000 條視頻,為你揭秘電影的更多「優秀梗」,看完還能Get新技能,趕快往下滑吧!
  • 春運了,Python爬特價機票,爬人臉識別、爬微信……監管空白?
    關鍵python代碼如下:  這裡所說的「爬蟲」,是一個「收集控」,它在各大航空公司的網站收集低價機票,在每個時間每個航段之間對比,選出最便宜的。這對於人類來說是一項非常繁瑣複雜的工作,但對於網絡「爬蟲」來說卻可以迅速完成;「爬蟲」又是一個「偽裝者」,它收集到特價機票後仿冒真人用戶搶訂機票。
  • 實戰|手把手教你用Python爬取存儲數據,還能自動在Excel中可視化
    來源 | 早起Python大家好,在之前我們講過如何用Python構建一個帶有GUI的爬蟲小程序,很多本文將迎合熱點,延續上次的NBA爬蟲GUI,探討如何爬取虎撲NBA官網數據,並且將數據寫入Excel中同時自動生成折線圖,主要有以下幾個步驟:本文將分為以下兩個部分進行講解:
  • 最簡單的Python爬蟲,僅3步11行代碼爬取豆瓣電影排名
    第一步:確定目標爬蟲的第一步是要確定爬取的目標,沒有目標就沒有方向,更無從寫代碼。我們的目標就是爬取豆瓣上電影排行,並且只爬取第一頁的數據。只要爬取到了第一頁,後面的頁就很容易實現了。這裡使用的瀏覽器是谷歌瀏覽器,也可以使用火狐瀏覽器,其他的不推薦。
  • 她用Python爬取了去哪兒網,終於不知道去哪兒了
    因為前幾次爬蟲都是爬一些文本信息,做一下詞雲之類的,中二的我覺得:沒!意!思!了!這次正好爬的是數據,我決定用數據的好基友——圖表來輸出我爬取的數據,也就是說我要用爬取的景點銷量以及景點的具體位置來生成一些可視化數據。