本章我們將學習網絡爬蟲 ,其中包括學習中的庫,它用于從網站中提取數據。
本章包含以下主題。
1什么是網絡爬蟲
網絡爬蟲是指從網站提取數據的技術,該技術可以將非結構化數據轉換為結構化數據。
網絡爬蟲的用途是從網站提取數據,提取的數據可以存儲到本地文件并保存在系統中,也可以將其以表格的形式存儲到數據庫中。網絡爬蟲使用HTTP或Web瀏覽器直接訪問萬維網(WWW)。網絡爬蟲或機器人抓取網頁的過程是一個自動化流程。
抓取網頁的過程分為獲取網頁、提取數據。Web抓取程序可以獲取網頁,它是網絡爬蟲的必需組件。在獲取網頁后,就需要提取網頁數據了。我們可以搜索、解析,并將提取的數據保存到表格中,然后重新整理格式。
2數據提取
本節我們學習數據提取。我們可以使用的庫進行數據提取。這里還需要用到庫的模塊。
運行以下命令以安裝和庫。
$ pip3 install requests
$ pip3 install beautifulsoup4
2.庫
使用庫可以易懂的格式在腳本中使用HTTP,這里使用中的庫獲取網頁。庫包含不同類型的請求,這里使用GET請求。GET請求用于從Web服務器獲取信息,使用GET請求可以獲取指定網頁的HTML內容。每個請求都對應一個狀態碼,狀態碼從服務器返回,這些狀態碼為我們提供了對應請求執行結果的相關信息。以下是部分狀態碼。
2.庫
也是一個庫,它包含簡單的搜索、導航和修改方法。它只是一個工具包,用于從網頁中提取所需的數據。
要在腳本中使用和模塊,必須使用語句導入這兩個模塊。現在我們來看一個解析網頁的示例程序,這里將解析一個來自百度網站的新聞網頁。創建一個腳本,命名為.py,并在其中寫入以下代碼。
import requests
from bs4 import BeautifulSoup
page_result = requests.get('https://www.news.baidu.com')
parse_obj = BeautifulSoup(page_result.content, 'html.parser')
print(parse_obj)
運行腳本程序,如下所示。
student@ubuntu:~/work$ python3 parse_web_page.py
Output:
<script type="text/javascript">var IMDbTimer={starttime: new
Date().getTime(),pt:'java'};</script>
<script>
if (typeof uet == 'function') {
uet("bb", "LoadTitle", {wb: 1});
}
</script>
<script>(function(t){ (t.events = t.events || {})["csm_head_pre_title"] =
new Date().getTime(); })(IMDbTimer);</script>
Top News - IMDb
<script>(function(t){ (t.events = t.events || {})["csm_head_post_title"] =
new Date().getTime(); })(IMDbTimer);</script>
<script>
if (typeof uet == 'function') {
uet("be", "LoadTitle", {wb: 1});
}
</script>
<script>
if (typeof uex == 'function') {
uex("ld", "LoadTitle", {wb: 1});
}
</script>
<script>
if (typeof uet == 'function') {
uet("bb", "LoadIcons", {wb: 1});
}
上面的示例程序抓取了一個網頁,并使用對其進行了解析。首先導入了和模塊,然后使用GET請求訪問URL,并將結果分配給變量,接著創建了一個對象,此對象將的返回結果.作為參數,然后使用html.解析該頁面。
現在我們將從類和標簽中提取數據。轉到Web瀏覽器,右擊要提取的內容并向下查找,找到“檢查”選項,單擊它將獲得類名。在程序中指定這個類名,并運行腳本。創建一個腳本,命名為.py,并在其中寫入以下代碼。
import requests
from bs4 import BeautifulSoup
page_result = requests.get('https://www.news.baidu.com')
parse_obj = BeautifulSoup(page_result.content, 'html.parser')
top_news = parse_obj.find(class_='news-article__content')
print(top_news)
運行腳本程序,如下所示。
student@ubuntu:~/work$ python3 extract_from_class.py
Output :
Issa Rae and
Laura Dern are teaming up to star in a limited
series called "The Dolls" currently in development at
HBO .
Inspired by true events, the
series recounts the aftermath of Christmas Eve riots in two small Arkansas
towns in 1983, riots which erupted over Cabbage Patch Dolls. The series
explores class, race, privilege and what it takes to be a "good
mother."
Rae will serve as a writer and executive producer on the
series in addition to starring, with Dern also executive producing.
Laura Kittrell and
Amy Aniobi will also serve as writers and coexecutive
producers.
Jayme Lemons of Dern’s
Jaywalker Pictures and
Deniese Davis of
Issa Rae Productions will also executive
produce.
Both Rae and Dern currently star in HBO shows, with Dern
appearing in the acclaimed drama "
Big Little
Lies " and Rae starring in and having created the hit comedy "
Insecure ." Dern also recently starred in the
film "
The Tale ,
上面的示例程序首先導入了和模塊,然后創建了一個對象并為其分配了一個URL,接著創建了一個對象。此對象將的返回結果.作為參數,然后使用html.解析頁面。最后網頁數據爬取工具 ,使用的find()方法從news-類中獲取內容。
現在我們來看一個從特定標簽中提取數據的示例程序,此示例程序將從標簽中提取數據。創建一個腳本,命名為.py,并在其中寫入以下代碼。
import requests
from bs4 import BeautifulSoup
page_result = requests.get('https://www.news.baidu.com/news')
parse_obj = BeautifulSoup(page_result.content, 'html.parser')
top_news = parse_obj.find(class_='news-article__content')
top_news_a_content = top_news.find_all('a')
print(top_news_a_content)
運行腳本程序,如下所示。
student@ubuntu:~/work$ python3 extract_from_tag.py
Output:
[Issa Rae , Laura
Dern , HBO , Laura Kittrell , Amy
Aniobi , Jayme Lemons , Jaywalker Pictures , Deniese Davis , Issa Rae Productions , Big Little Lies , Insecure , The
Tale ]
上面的示例程序從標簽中提取數據。這里使用()方法從news-類中提取所有標簽數據。
3從維基百科網站抓取信息
本節我們將學習一個從維基百科網站獲取舞蹈種類列表的示例程序,這里將列出所有古典印度舞蹈。創建一個腳本,命名為ia.py,并在其中寫入以下代碼。
import requests
from bs4 import BeautifulSoup
page_result = requests.get('https://en.wikipedia.org/wiki/Portal:History')
parse_obj = BeautifulSoup(page_result.content, 'html.parser')
h_obj = parse_obj.find(class_='hlist noprint')
h_obj_a_content = h_obj.find_all('a')
print(h_obj)
print(h_obj_a_content)
運行腳本程序,如下所示。
student@ubuntu:~/work$ python3 extract_from_wikipedia.py
輸出如下。
Portal topics
Activities
Culture
Geography
Health
History
Mathematics
Nature
People
In the preceding example, we extracted the content from Wikipedia. In this
example also, we extracted the content from class as well as tag.
....
4總結
在本章中,我們學習了網絡爬蟲的有關內容,其中學習了兩個用于從網頁中提取數據的庫,還學習了從維基百科網站提取信息。
在第17章中,我們將學習統計信息的收集和報告。其中將學習NumPy模塊,數據可視化以及使用plots、和顯示數據。
5問題
1.什么是網絡爬蟲?
2.什么是網絡抓取工具?
3.我們可以從需要登錄的網頁抓取數據嗎?
4.我們可以爬取網站數據嗎?
5.我們是否可以爬取Java腳本頁面數據?如果可以,怎么做?
本文摘自:《寫給系統管理員的腳本編程指南》
[印度] 甘尼什·桑吉夫·奈克(,,Naik) 著,張成悟 譯
本書首先介紹的安裝,并講解編程基礎知識。然后,本書將側重于解析整個開發過程,從配置到準備再到構建 不同的工具,包括IT管理員的日常活動(文本處理、正則表達式、文件存檔和加密)、網絡管理(套接字編程、電子郵 件處理、使用/SSH遠程控制設備以及SNMP/DHCP等協議)、創建圖形用戶界面、網站處理(日志 文件處理、SOAP和REST API通信、Web抓取),以及數據庫管理(MySQL和相似數據庫數據管理、數據分析和報告)。學完本書,讀者將能夠使用功能構建強大的工具以解決具有挑戰性的實際任務。
讀者將學到以下內容:
■ 了解如何安裝和調試腳本;
■ 了解和編寫用于自動化測試和日常管理活動的腳本;
■ 了解如何編寫用于文本處理、加密、解密和歸檔的腳本;
■ 處理PDF、Excel、CSV和文本文件網頁數據爬取工具 ,并生成報告;
■ 編寫用于遠程網絡管理(包括處理電子郵件)的腳本;
■ 使用圖形用戶界面構建交互式工具;
■ 處理日志文件,以及SOAP和REST API的通信;
■ 自動化數據庫管理并執行統計分析。