python爬蟲實戰之最簡單的網頁爬蟲教程

python爬蟲實戰之最簡單的網頁爬蟲教程

前言

網路爬蟲(又被稱為網頁蜘蛛,網路機器人,在FOAF社群中間,更經常的稱為網頁追逐者),是一種按照一定的規則,自動地抓取全球資訊網資訊的程式或者指令碼。最近對python爬蟲有了強烈地興趣,在此分享自己的學習路徑,歡迎大家提出建議。我們相互交流,共同進步。話不多說了,來一起看看詳細的介紹:

1.開發工具

筆者使用的工具是sublime text3,它的短小精悍(可能男人們都不喜歡這個詞)使我十分著迷。推薦大家使用,當然如果你的電腦配置不錯,pycharm可能更加適合你。

sublime text3搭建python開發環境推薦檢視這篇文章:

[sublime搭建python開發環境][//www.jb51.net/article/51838.htm]

2.爬蟲介紹

爬蟲顧名思義,就是像蟲子一樣,爬在Internet這張大網上。如此,我們便可以獲取自己想要的東西。

既然要爬在Internet上,那麼我們就需要了解URL,法號“統一資源定位器”,小名“連結”。其結構主要由三部分組成:

(1)協議:如我們在網址中常見的HTTP協議。

(2)域名或者IP地址:域名,如:www.baidu.com,IP地址,即將域名解析後對應的IP。

(3)路徑:即目錄或者檔案等。

3.urllib開發最簡單的爬蟲

(1)urllib簡介

ModuleIntroduce
urllib.errorException classes raised by urllib.request.
urllib.parseParse URLs into or assemble them from components.
urllib.requestExtensible library for opening URLs.
urllib.responseResponse classes used by urllib.
urllib.robotparserLoad a robots.txt file and answer questions about fetchability of other URLs.

(2)開發最簡單的爬蟲

百度首頁簡潔大方,很適合我們爬蟲。

爬蟲程式碼如下:


from urllib import request
def visit_baidu():
URL = "http://www.baidu.com"
# open the URL
req = request.urlopen(URL)
# read the URL 
html = req.read()
# decode the URL to utf-8
html = html.decode("utf_8")
print(html)
if __name__ == '__main__':
visit_baidu()

結果如下圖:

我們可以通過在百度首頁空白處右擊,檢視審查元素來和我們的執行結果對比。

當然,request也可以生成一個request物件,這個物件可以用urlopen方法開啟。

程式碼如下:


from urllib import request
def vists_baidu():
# create a request obkect
req = request.Request('http://www.baidu.com')
# open the request object
response = request.urlopen(req)
# read the response 
html = response.read()
html = html.decode('utf-8')
print(html)
if __name__ == '__main__':
vists_baidu()

執行結果和剛才相同。

(3)錯誤處理

錯誤處理通過urllib模組來處理,主要有URLError和HTTPError錯誤,其中HTTPError錯誤是URLError錯誤的子類,即HTTRPError也可以通過URLError捕獲。

HTTPError可以通過其code屬性來捕獲。

處理HTTPError的程式碼如下:


from urllib import request
from urllib import error
def Err():
url = "https://segmentfault.com/zzz"
req = request.Request(url)
try:
response = request.urlopen(req)
html = response.read().decode("utf-8")
print(html)
except error.HTTPError as e:
print(e.code)
if __name__ == '__main__':
Err()

執行結果如圖:

404為列印出的錯誤程式碼,關於此詳細資訊大家可以自行百度。

URLError可以通過其reason屬性來捕獲。

chuliHTTPError的程式碼如下:


from urllib import request
from urllib import error
def Err():
url = "https://segmentf.com/"
req = request.Request(url)
try:
response = request.urlopen(req)
html = response.read().decode("utf-8")
print(html)
except error.URLError as e:
print(e.reason)
if __name__ == '__main__':
Err()

執行結果如圖:

既然為了處理錯誤,那麼最好兩個錯誤都寫入程式碼中,畢竟越細緻越清晰。須注意的是,HTTPError是URLError的子類,所以一定要將HTTPError放在URLError的前面,否則都會輸出URLError的,如將404輸出為Not Found。

程式碼如下:


from urllib import request
from urllib import error
# 第一種方法,URLErroe和HTTPError
def Err():
url = "https://segmentfault.com/zzz"
req = request.Request(url)
try:
response = request.urlopen(req)
html = response.read().decode("utf-8")
print(html)
except error.HTTPError as e:
print(e.code)
except error.URLError as e:
print(e.reason)

大家可以更改url來檢視各種錯誤的輸出形式。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對指令碼之家的支援。

您可能感興趣的文章:

Python爬蟲例項爬取網站搞笑段子Python3.4程式設計實現簡單抓取爬蟲功能示例Python網路爬蟲與資訊提取(例項講解)python利用urllib實現爬取京東網站商品圖片的爬蟲例項python製作小說爬蟲實錄Python 爬蟲之超連結 url中含有中文出錯及解決辦法Python實現的爬蟲功能程式碼基於python爬蟲資料處理(詳解)python爬蟲入門教程–HTML文字的解析庫BeautifulSoup(四)Python爬蟲之模擬知乎登入的方法教程python爬蟲入門教程–優雅的HTTP庫requests(二)Python爬蟲實現(偽)球迷速成