點擊上方關注,All in AI中國
作者:Ann Mohan Kunnath
因特網上有許多非結構化數據。一旦收集並轉換成結構化、有意義的格式,這些數據就可以用來執行分析並獲得富有成效的見解。在本教程中,我將演示如何從因特網上收集這些數據,並對其進行處理,以使其具有結構化的格式。這個過程被稱為網頁抓取。它也被稱為屏幕抓取、網頁獲取或網頁數據提取。
網頁抓取在商業中有很多應用。市場情緒分析、客戶情緒分析和競爭定價是其中的幾個例子。
在這篇文章中,我將演示如何使用Python在web上抓取partments.com。
步驟1:在對一個網站進行抓取之前,我們需要看看他們的robots.txt。
因為這個文件會告訴我們網站是允許抓取還是不允許抓取。我們要做的就是找到robots.txt,輸入基本url並添加"/robots.txt"。例如,如果我們想爬partments.com,我們要輸入https:/www.partments.com/robots.txt。
如果robots.txt允許完全訪問,則如下所示:
用戶代理:*
不允許:
如果robots.txt阻止所有訪問,則包含以下內容:
用戶代理:*
不允許:/
如果robots.txt允許部分訪問,則包含以下內容,其中section表示不需要爬行的部分:
用戶代理:*
不允許:/section/
就partments.com而言,robots.txt包含以下內容:
上圖意味著我們可以抓取站點上的所有部分,除了在url中標有partments.com/services/的部分。
步驟2:導入必要的庫:
在本例中,Requests庫用於獲取html內容,BeautifulSoup用於解析html,pandas用於創建數據幀(dataframe)並寫入csv。
步驟3:將所抓取變量的url存儲起來。
在本例中,我轉到partments.com網站,在搜索框中輸入辛辛那提(Cincinnati),然後按回車鍵,得到的東西如下面的屏幕截圖所示。
這使我的url改為https:/www.partments.com/Cincinnati-oh/ 如下面的截圖所示,這將是我的默認地(網)址。
步驟4:從頁面中獲取html內容。這裡需要使用requests庫完成。
步驟5:解析html。這裡需要應用到BeautifulSoup。
步驟6:提取頁面第一頁和最後一頁的頁碼。這樣做對我們而言非常重要,可以方便我們在網站上的頁面上動態爬行。在這裡所要做的只是單擊頁面末尾的分頁部分,如下面的圖片所示,右鍵單擊inspect。
在單擊inspect時,我們可以看到頁碼位於div id"分頁"內,而它又位於div id"placardContainer"內,如下所示。
下面的代碼是使用了這些標記來提取起始頁碼和結束頁碼的。
步驟7:創建一個空列表來補充我們稍後獲得的所有內容。
步驟8:從頁碼中創建頁面鏈接,在頁面中爬行並從相應的標記中提取內容。我們通過for循環確保爬行過每個頁面。
步驟9:對網頁中(所出租房屋的)名字和位置這些主要信息進行抓取。右鍵單擊名字這一欄進行檢查。在下面的(代碼)截圖中,我們可以看到,在所有權方面"辛辛那提的威廉斯堡"屬於"placardHeader"這一類,位置信息位於代碼中表示名字的下方。稍後我們將使用藍色矩形中所標記的代碼來提取它們具體的信息。
步驟10:我們現在要對是否已出租給他人,有幾張床和聯繫電話這些次要信息進行提取。通過對相關代碼的檢查,我們可以看到它們都屬於次要信息"placardContent"下,如下面的截圖所示。稍後我們將使用藍色矩形中所標記的代碼來提取它們具體的信息。
步驟11:啟動for循環(循環從所有權開始,當再循環到所有權時結束),並對名字、地址、價格、有幾張床和聯繫電話這些有價值的信息進行提取。我們通過之前對這些值做出的標記來提取它們的信息。在步驟9和步驟10的截圖中,這些信息都通過藍色矩形框所標出。
步驟12:使用該列表創建一個數據文件,並將該列表寫入CSV文件
步驟13:現在,我們可以在工作目錄中找到Output.csv文件,它將以結構化的方式獲得所有信息。下面是CSV前5行的截圖。
做完了!意猶未盡的你請點:
https://github.com/annmohankunnath/Webscraping/blob/master/Webscraping.ipynb
閱讀更多 AI中國 的文章