教程|Python?Web頁面抓取:循序漸進

2020-12-26 艾瑞網

導語:今天,小Oxy要為大家帶來Pytho中Web頁面的抓取教程,跟著小Oxy往下看吧!

今天,小Oxy要為大家帶來Python中Web頁面的抓取教程,跟著小Oxy往下看吧!

大家不要看到代碼就覺得頭疼或是特別困難,其實Web爬蟲是非常簡單的。Python是面向對象的語言,而且與其他語言相比,類和對象都更容易操作,所以是Python Web爬蟲最簡單的入門方法之一。此外,還有許多庫能簡化Python Web爬蟲工具的構建流程。

這次小Oxy會概述入門所需的知識,包括如何從頁面源獲取基於文本的數據以及如何將這些數據存儲到文件中並根據設置的參數對輸出進行排序。最後,還會介紹Python Web爬蟲的高級功能。按照小Oxy今天所介紹的按部就班的學習就能學會Web爬蟲喲。

另外,小Oxy所介紹的教程適用於所有作業系統。但是,在安裝學習Python所用的環境和在正式開發環境的配置可能會稍有不同。

準備工作

這次為大家介紹的教程選用了3.8.3版本的Python,也適用於所有3.4+的版本。下面跟著小Oxy一起學習吧!

Windows系統安裝Python時,選 「PATH installation」,PATH安裝將可執行文件添加到默認的Windows命令提示符,執行文件搜索。Windows將識別諸如「pip」或「python」之類的命令,不需用戶將其指向可執行文件的目錄(例如C://tools/python//python.exe)。如果已經安裝了Python,但是沒有選中複選框,只需重新運行安裝並選擇modify。在第二個屏幕上選擇「添加到環境變量」。

系統安裝後,還要使用三個重要的庫– BeautifulSoup v4,Pandas和Selenium。

BeautifulSoup廣泛用於解析HTML文件;

Pandas用於結構化數據的創建;

Selenium用於瀏覽器自動化;

安裝庫需啟動作業系統的終端。輸入:

每一次安裝都需要幾秒鐘到幾分鐘的時間。如果遇到終端死機、在下載或解壓安裝軟體包時卡住或其他問題,只要電腦尚未完全卡機,那麼可以使用CTRL+C中止安裝。

下一步教程默認安裝軟體以及庫的操作已完成。如果收到「NameError:name*is not defined」消息,很可能其中某個庫安裝失敗。

Web驅動和瀏覽器

Web爬蟲要通過瀏覽器連接到目標URL地址。出於測試目的,建議使用常規瀏覽器(或非無頭瀏覽器),尤其是新手。看到代碼與應用程式交互就能進行簡單的故障排除和調試,也有助於更好地理解整個過程。

無頭瀏覽器處理複雜任務效率更高,後續可使用。本教程使Chrome網頁瀏覽器,若選用Firefox瀏覽器,過程也相差無幾。

首先,搜索「 Chrome瀏覽器的網絡驅動程序」(或Firefox),下載適用版本。

選擇適用的軟體包下載並解壓縮。將驅動程序的可執行文件複製到易於訪問的目錄。進行之後的步驟才能知道下載安裝的操作正確與否。

編碼環境

在編程之前還需最後一步:良好的編碼環境。包括從簡單的文本編輯器到功能齊全的IDE(集成開發環境)等,其中,在簡單的文本編輯器中只需創建一個* .py文件並直接寫代碼即可。

如果已經安裝Visual Studio Code,則選擇IDE最為簡單。如果沒有,建議新手使用PyCharm,入門簡單且界面直觀。接下來教程以 PyCharm為例。

在PyCharm中右鍵單擊項目區域,單擊「新建-> Python文件」,再命名。

導入庫並使用

安裝的軟體和程序開始派上用場:

PyCharm會自動標記未使用的庫(顯示為灰色)。不建議刪除未使用的庫。

從定義瀏覽器開始,根據在「 web驅動和瀏覽器」中選擇的web驅動,應輸入:

選擇URL

Python頁面抓取需要調查的網站來源

在進行第一次測試運行前請選擇URL。小Oxy希望創建基本應用程式,因此建議選擇簡單的目標URL:

??不要將數據隱藏在Javascript元素中。有時候需要特定操作來顯示所需的數據。從Javascript元素中刪除數據則需要更複雜的操作。

??不要爬取圖像,直接利用Selenium即可。

??在進行網頁爬蟲之前,確保對象是公共數據,並且不侵犯第三方權益。另外,要查看robots.txt文件獲得指導。

選擇要訪問的登錄頁面,將URL輸入到driver.get(『URL』)參數中。Selenium要求提供連接協議。因此,始終需要在URL上附加「 http://」或「 https://」。

單擊右下角的綠色箭頭進行測試。

如果收到錯誤消息表明文件丟失,再次檢查驅動程序「 webdriver.*」中提供的路徑是否與webdriver可執行文件的位置匹配。如果收到消息表明版本不匹配,重新下載正確的webdriver可執行文件。

確定對象,建立Lists

Python允許程式設計師在不指定確切類型的情況下設計對象。只需鍵入對象的標題並指定一個值即可。

Python中的列表(Lists)有序可變,並且可重複。sets、dictionaries等集合也可使用,當然Lists更容易些。接下來,繼續學習!

在進行下一步之前,回顧一下到目前為止代碼應該是什麼樣子的:

重新運行應用程式,此時不應有錯誤提示。如出現任何問題,上文已介紹了一些故障排除的情況。

提取數據

有趣而困難的部分–從HTML文件中提取數據。幾乎在所有情況下,都是從頁面的不同部分中取出一小部分,再將其存儲到列表中。所以應先處理每個較小的部分,再將其添加到列表中:

「soup.findAll」可接受的參數範圍廣泛。本教程僅使用「arts」(屬性),可設置「如果屬性等於X為true,則……」,縮小搜索範圍,這樣就很容易找到並使用類。

在繼續下一步學習之前,在瀏覽器中訪問選定的URL。CTRL + U(Chrome)或右鍵單擊打開頁面源,選擇「查看頁面源」。找到嵌套數據「最近」的類。也可以按F12打開DevTools,選擇「元素選取器」。例如,它可以嵌套為:

屬性「class」將是「title」。如果選擇簡單的目標,則在大多數情況下,數據將以與示例類似的方式嵌套。複雜的目標可能需要更複雜繁多的操作。回歸到編碼部分,並添加原始碼中的類:

現在,循環將遍歷頁面源中所有帶有「title」類的對象。接下來是處理每一個的過程:

循環如何遍歷HTML:

第一條語句(在循環中)查找所有與標記匹配的元素,這些標記的「類」屬性包含「標題」。然後在該類中執行另一個搜索。下一個搜索將找到文檔中的所有標記(包括,不包括之類的部分匹配項)。最後,將對象賦值給變量「name」。

然後可以將對象名稱分給先前創建的列表數組「results」,但是這樣會將帶有文本的標記帶到一個元素中。大多數情況下,只需要文本本身而不需任何其他標籤。

循環將遍歷整個頁面源,找到上面列出的所有類,然後將嵌套數據追加到列表中:

注意,循環後的兩個語句是縮進的。循環需要用縮進來表示嵌套。沒有縮進的循環將輸出「IndentationError」,並用「arrow」指出有問題的語句。

輸出數據

Python頁面抓取需要對代碼進行不斷的檢查

即使在運行程序時沒有出現語法或運行錯誤,也仍然可能存在語義錯誤。應該檢查實際上是否有分配給正確對象的數據,並正確地移動到數組。

檢查在前面步驟中採集數據是否正確的最簡單方法之一是「列印」。數組有許多不同的值,通常使用簡單的循環將每個條目分隔到輸出中的單獨一行:

在這一點上,「print」和「for」都是可行的。啟動循環只是為了快速測試和調試。所以,直接列印結果是完全可行的:

到目前為止,編碼應該如下所示:

現在運行程序應不會顯示任何錯誤,並且會在調試器窗口中顯示獲取的數據。儘管「列印」非常適合用於測試,但對於解析和分析數據而言卻並非如此。

到目前為止,「import pandas」仍為灰色,最後要充分利用該庫。因為將執行類似的操作,所以建議暫時刪除「print」循環,將數據結果輸入到csv文件中。

兩個新語句依賴於pandas庫。第一條語句創建變量「 df」,並將其對象轉換為二維數據表。「Names」是列的名稱,「results」是要列印的列表。pandas可以創建多列,但目前沒有足夠的列表來利用這些參數。

第二條語句將變量「df」的數據移動到特定的文件類型(在本例中為「 csv」)。第一個參數為即將創建的文件和擴展名分配名稱。因為「pandas」輸出的文件不帶擴展名,所以需要手動添加擴展名。「index」可用於為列分配特定的起始編號。「encoding」用於以特定格式保存數據。UTF-已經幾乎適用於所有情況。

現在任何導入都不應顯示為灰色,並且能在項目目錄中輸出「names.csv」運行應用程式。如果仍有「Guessed At Parser」的警告,可通過安裝第三方解析器將其刪除。但考慮到本教程目的,默認HTML選項即可。

更多的Lists

Python頁面抓取通常需要許多數據點

許多Web爬蟲操作需獲取幾組數據。例如,僅提取電子商務網站上項目標題用處不大。為了收集有意義的信息並從中得出結論,至少需要兩個數據點。

當然,小Oxy還將介紹一些稍有不同的方法。因為從同一類中獲取數據僅意味著附加到另一個列表,所以應嘗試從另一類中提取數據,但同時要維持表的結構。

顯然,需要另一個列表來儲存數據。

由於要從HTML的不同部分提取額外的數據點,所以需要額外的循環。如有必要還可添加另一個「If」條件來控制重複條目:

最後,需要更改數據表的形成方式:

到目前為止,我們代碼的最新迭代應如下所示:

幸運的話,運行此代碼時不會輸出錯誤。但在某些情況下,「pandas」將輸出「ValueError:arrays must be same length」消息。簡而言之,列表「results」和「other_results」的長度是不相等的,因此pandas不能創建二維表。

有很多方法可以解決此問題,比如用「empty」值填充最短列表或創建字典,再創建兩個序列並將它們列出。現在,有第三個方法:

列表的長度不一,則不會匹配數據,如果需要兩個數據點,則創建兩個序列是最簡單的解決方法。最終代碼應該如下:

創建一個名為「names」的csv文件,其中包括兩列數據,然後再運行。

高級功能

現在,Web爬蟲應該可以正常使用了。當然,這個爬蟲非常基礎簡單,需要升級才能執行複雜的數據採集。在學習更複雜的教程之前,建議嘗試其他功能:創建循環從而創建長度相等的列表,匹配數據提取。

很多方法能一次爬取數個URL。最簡單的方法之一是重複上面的代碼,每次都更改URL,但這種操作很煩。所以,構建循環和要訪問的URL數組即可。

創建多個數組存儲不同的數據集,並將其輸出到不同行的文件中。一次收集幾種不同類型的信息對電子商務獲取數據而言很重要。

Web爬蟲工具自動運行,無需操作。採用Chrome或Firefox瀏覽器的無頭版本,減少加載時間。

創建爬蟲模式。思考普通用戶如何瀏覽網際網路並嘗試自動化的過程。這肯定需要新的庫。用「import time」和「from random import randint」創建頁面之間的等待時間。添加「scrollto()」或使用特定的鍵控制滾動條。創建爬蟲模式時,幾乎不可能列出所有可能的選項。

創建監控流程。某些網站上的數據可能對時間(甚至用戶)敏感。創建長時間循環,重新檢查某些url並按設置的間隔爬取數據,確保數據的時效性。

最後,將代理集成到web爬蟲,通過特定位置的使用許可獲取可能無法訪問的數據。

接下來內容就要靠大家自學了。構建web爬蟲、獲取數據並從大量信息中得出結論,這個過程有趣又複雜。當然,如果想了解更多有關代理或高級數據採集工具如何工作的信息,可以點擊閱讀原文查看我們的博客哦!博客上還有更詳細的教程指南、避免爬蟲時數據擁堵以及代理方面的知識和文章!如果覺得我們的文章有用,記得點「在看」支持我們哦!


(文章為作者獨立觀點,不代表艾瑞網立場)

相關焦點

  • Python新手爬蟲,簡單製作抓取廖雪峰的教程的小爬蟲
    先看幾張對比圖,分別是官網截圖和抓取下來的 txt文檔的截圖,不算那難看的排版的話,內容是一致的,圖片用 url替換了!在整個抓取過程中,除了普通的文本以外,還需要處理 3個地方,分別是:代碼、圖片、視頻,因為目前只寫到了文本文件,所以直接抓到圖片或者視頻的地址,標識清楚後寫入到 txt,這裡可以在進一步,寫到 word/pdf 或者其他文件,留待以後改進!
  • 如何用Python和Scrapy將Web轉化為數據
    有兩種方法可以做到:-使用官方API網頁抓取引入了API(應用程式編程接口)的概念,以標準的方式在不同的系統之間交換數據。但是,大多數時候,網站所有者不提供任何API。在這種情況下,我們只剩下使用web抓取來提取數據的可能性。
  • Python爬蟲,抓取淘寶商品評論內容
    今天給大家分享用python做個抓取淘寶商品評論的小爬蟲!思路我們就拿「德州扒雞」做為參考目標吧~!如果想抓其他商品的話,自行更換目標即可!作為一個爬蟲愛好者,必然要加深抓取的廣度的,試著將整個頁面的店鋪ID抓取出來!這次簡單,直接抓到json數據,然後用正則匹配,放回列表,因為時間有限,沒有研究出url翻頁的依據,就只抓取了一頁!然後開始寫主函數,保存到文檔!
  • 開課吧Python:Python爬蟲是什麼?爬蟲工程師薪資怎麼樣?
    Python爬蟲是由Python程序開發的網絡爬蟲(webspider,webrobot),是按照一定規則自動抓取全球資訊網信息的程序或腳本。其實一般是通過程序在網頁上獲取你想要的數據,也就是自動抓取數據。為什麼需要用爬蟲?
  • Python新手學習網絡爬蟲要做什麼?
    爬蟲,被稱為網絡機器人,在FOAF社區中間,更經常的稱為網頁追逐者,是一種按照一定的規則,自動地抓取全球資訊網信息的程序或者腳本,主要用於搜尋引擎,它將一個網站的所有內容與連結進行閱讀,並建立相關的全文索引到資料庫中,然後跳到另一個網站。
  • Python新手都可以做的爬蟲,抓取網上 OJ 題庫信息
    目標:浙江大學題庫工具:python3.6,requests 庫、lxml 庫、pycharm思路:先找到網頁中題庫所在的位置然後我們點擊第一頁和後面幾頁,看看 url 的變化發現規律了嗎?就是 Number 後面的頁數變了,其他的都沒變,這樣就很方便構建循環了,在來看看源碼中題目的 title 和 Id 以及 url 的位置是不是很明顯,在 a 標籤的屬性中有具體的 URL,包括 ID 也在 URL 中出現,而 title在 font 標籤中出現了,這樣就很簡單了,我們直接用 xpath 抓取 td 標籤,然後匹配出url 和 title,並且切割
  • Python
    然後使用python的第三方框架newspaper3k,直接通過給指定的連結,然後返回新聞文本(當然也可通過BeautifulSoup切出文本)二,過程如下:1.選定網址   新浪新聞 https://news.sina.com.cn/roll/#pageid=153&lid=2509&k=&num=50&page=1
  • Python真的值得學習嗎
    尤其是2017年人工智慧概念的興起,python的關注度也是越來越高。儘管目前它仍然無法和java等程式語言抗衡,但隨著未來人工智慧權重的提高,掌握python也就成為一種必然。它的開發效率比 C, Java 高很多,很多的創業公司當初為了把想法快速變成現實產品從而獲得投資資金,首選 Python作為開發語言。這估計也是當年推動python流行起來的另一個原因吧。
  • Excel與Python爬取數據,兩者PK,誰優誰劣?
    小夥伴們大家好~Excel和python作為當前兩款比較火的數據分析處理工具,兩者之間有很多共性也有很大的區別。今天一起來看下在抓取網頁數據這塊,兩者有什麼異同點。如果用python爬取上面的網頁,只需要三行代碼,如下圖所示:這裡沒有用BS4,xpath等網頁解析方法,pandas提供了read_html的功能,可以直接獲取網頁數據。與Excel相比,python的優勢在於效率與便捷性。
  • python爬蟲系列教程,用python爬取全國範圍內的KFC店地址
    下面羽憶教程教你會python爬取全國範圍內的KFC店地址,這是一篇python爬蟲系列的教程,簡單又能讓人填飽肚子。python爬蟲介紹python發展至今,python爬蟲已經成為了一種職業,因為其可以幫助企業快速得到網絡上的最新信息,但是為什麼很多寫python爬蟲的程式設計師會面臨牢獄之災呢?
  • SEO學習搜尋引擎爬蟲網頁抓取策略
    對於待抓取URL隊列中的網頁,根據等待下載的頁面多少來判斷下載優先級。4、非完全PageRank策略(Partial PageRank)對於已經下載的網頁(不完整的網際網路頁面的子集)內,加上待抓取的URL隊列中的URL一起,形成網頁集合,在此集合內部進行PageRank計算;計算完成以後,將待抓取URL隊列裡的網頁按照PageRank得分由高到低排序,形成序列就是爬蟲接下來應該依次抓取的
  • python為什麼叫爬蟲?為啥那麼多人通過python兼職都能掙不少錢?
    Python能做什麼之前有很多文章介紹python能做什麼。今天介紹python爬蟲的學習。網絡爬蟲 網絡爬蟲,也叫網絡蜘蛛(Web Spider)。爬蟲是在某個URL頁面入手,抓取到這個頁面的內容,從當前的頁面中找到其他的連結地址,然後從這地址再次爬到下一個網站頁面,這樣一直不停的抓取到有用的信息,所以可以說網絡爬蟲是不停的抓取獲得頁面上想要的信息的程序。還不懂?
  • 使用C#的後端Web API:循序漸進教程
    本教程介紹如何使用C#(ASP.NET)構建自己的Web伺服器(Web API)。重要的是要注意,要託管您的伺服器,您將需要基於Windows的託管。先決條件我想我們可以開始了。現在,您可以在解決方案資源管理器中瀏覽生成的文件夾和文件 有應用程式配置,幫助頁面數據,一些控制器,字體,CSS和JS文件。路由表默認情況下,伺服器使用位於App_Start / WebApiConfig.cs中的路由表。
  • python爬蟲之selenium抓取淘寶商品信息
    簡介本節採用python爬蟲相關技術獲取淘寶商品信息。採用的技術有selenium、pyquery及urllib.parse等。selenium有優點也有缺點,模擬用戶實際操作,必須等待網頁的必要信息加載完畢,如靜態頁面、css等,所以效率比較低,所以具體看用戶如何取捨,如果注重效率,可以用requests模塊進行分析爬取,後續有空也會採用requests、urllib庫進行爬蟲訓練,使用正則表達式分析爬取到的內容。
  • Python爬蟲學到什麼程度就可以去找工作了?
    有朋友在群裡和大家討論,問的最多的問題就是,python 爬蟲學到什麼程度可以去找工作了,關於這點,和大家分享下我的理解。去招聘網上看看需求都有哪些,直接做個拉勾網爬蟲(有需要的私信)出結果了:仔細看看,我們可以得出以下幾點:1、 python 不是唯一可以做爬蟲的,很多語言都可以,
  • 雲立方網科普:常用高效的Python爬蟲框架有哪些?
    Pyspider 是一個用python實現的功能強大的網絡爬蟲系統,能在瀏覽器界面上進行腳本的編寫,功能的調度和爬取結果的實時查看,後端使用常用的資料庫進行爬取結果的存儲,還能定時設置任務與任務優先級等。
  • python爬蟲入門實戰!爬取博客文章標題和連結!
    最近有小夥伴和我留言想學python爬蟲,那麼就搞起來吧。準備階段爬蟲有什麼用呢?舉個最簡單的小例子,你需要《戰狼2》的所有豆瓣影評。最先想的做法可能是打開瀏覽器,進入該網站,找到評論,一個一個複製到文本中,保存,翻頁,接著複製,直到翻到最後一頁。
  • python-開始django吧!
    django==1.11.9 #指定版本 創建項目安裝完後會有一個django-admin的腳本可以創建項目和應用就可以開始編程:cd /home/yunweicaidjango-admin startproject mysitecd mysitedjango-admin startapp web01
  • 數據從業者必讀:抓取了一千億個網頁後我才明白,爬蟲一點都不簡單
    本文是該系列文章的第一篇,在這裡我們將提供規模抓取產品數據所面臨主要挑戰的概覽,以及Scrapinghub從抓取1000億產品頁面中學到的經驗教訓。成立於2010年的Scrapinghub是領先的數據析取公司之一,也是當今最健壯和流行的web爬蟲框架Scrapy的作者。
  • web開發實戰教程:Apache Shiro在web項目的應用
    web開發實戰教程今天準備分享一下Apache Shiro 在web開發中的應用。shiro安全框架是目前為止作為登錄註冊最常用的框架,因為它十分的強大簡單,提供了認證、授權、加密和會話管理等功能 。Apache Shiro在web項目的應用2.配置 web.xml 文件在web.xml中加入以下代碼—shiro過濾器。