python爬蟲實(shí)戰(zhàn)之最簡單的網(wǎng)頁爬蟲教程
前言
網(wǎng)絡(luò)爬蟲(又被稱為網(wǎng)頁蜘蛛,網(wǎng)絡(luò)機(jī)器人,在FOAF社區(qū)中間,更經(jīng)常的稱為網(wǎng)頁追逐者),是一種按照一定的規(guī)則,自動(dòng)地抓取萬維網(wǎng)信息的程序或者腳本。最近對(duì)python爬蟲有了強(qiáng)烈地興趣,在此分享自己的學(xué)習(xí)路徑,歡迎大家提出建議。我們相互交流,共同進(jìn)步。話不多說了,來一起看看詳細(xì)的介紹:
1.開發(fā)工具
筆者使用的工具是sublime text3,它的短小精悍(可能男人們都不喜歡這個(gè)詞)使我十分著迷。推薦大家使用,當(dāng)然如果你的電腦配置不錯(cuò),pycharm可能更加適合你。
sublime text3搭建python開發(fā)環(huán)境推薦查看這篇文章:
[sublime搭建python開發(fā)環(huán)境][http://www.dhdzp.com/article/51838.htm]
2.爬蟲介紹
爬蟲顧名思義,就是像蟲子一樣,爬在Internet這張大網(wǎng)上。如此,我們便可以獲取自己想要的東西。
既然要爬在Internet上,那么我們就需要了解URL,法號(hào)“統(tǒng)一資源定位器”,小名“鏈接”。其結(jié)構(gòu)主要由三部分組成:
(1)協(xié)議:如我們?cè)诰W(wǎng)址中常見的HTTP協(xié)議。
(2)域名或者IP地址:域名,如:www.baidu.com,IP地址,即將域名解析后對(duì)應(yīng)的IP。
(3)路徑:即目錄或者文件等。
3.urllib開發(fā)最簡單的爬蟲
(1)urllib簡介
| Module | Introduce |
|---|---|
| urllib.error | Exception classes raised by urllib.request. |
| urllib.parse | Parse URLs into or assemble them from components. |
| urllib.request | Extensible library for opening URLs. |
| urllib.response | Response classes used by urllib. |
| urllib.robotparser | Load a robots.txt file and answer questions about fetchability of other URLs. |
(2)開發(fā)最簡單的爬蟲
百度首頁簡潔大方,很適合我們爬蟲。
爬蟲代碼如下:
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()
結(jié)果如下圖:

我們可以通過在百度首頁空白處右擊,查看審查元素來和我們的運(yùn)行結(jié)果對(duì)比。
當(dāng)然,request也可以生成一個(gè)request對(duì)象,這個(gè)對(duì)象可以用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()
運(yùn)行結(jié)果和剛才相同。
(3)錯(cuò)誤處理
錯(cuò)誤處理通過urllib模塊來處理,主要有URLError和HTTPError錯(cuò)誤,其中HTTPError錯(cuò)誤是URLError錯(cuò)誤的子類,即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()
運(yùn)行結(jié)果如圖:

404為打印出的錯(cuò)誤代碼,關(guān)于此詳細(xì)信息大家可以自行百度。
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()
運(yùn)行結(jié)果如圖:

既然為了處理錯(cuò)誤,那么最好兩個(gè)錯(cuò)誤都寫入代碼中,畢竟越細(xì)致越清晰。須注意的是,HTTPError是URLError的子類,所以一定要將HTTPError放在URLError的前面,否則都會(huì)輸出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來查看各種錯(cuò)誤的輸出形式。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Pyqt5將多個(gè)類組合在一個(gè)界面顯示的完整示例
這篇文章主要給大家介紹了關(guān)于Pyqt5將多個(gè)類組合在一個(gè)界面顯示的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2021-09-09
python requests庫爬取豆瓣電視劇數(shù)據(jù)并保存到本地詳解
這篇文章主要介紹了python requests庫爬取豆瓣電視劇數(shù)據(jù)并保存到本地詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
淺析Python數(shù)字類型和字符串類型的內(nèi)置方法
這篇文章主要介紹了Python數(shù)字類型和字符串類型的內(nèi)置方法,本文通過實(shí)例代碼講解的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12
PyTorch深度學(xué)習(xí)模型的保存和加載流程詳解
PyTorch是一個(gè)開源的Python機(jī)器學(xué)習(xí)庫,基于Torch,用于自然語言處理等應(yīng)用程序。2017年1月,由Facebook人工智能研究院(FAIR)基于Torch推出了PyTorch,這篇文章主要介紹了PyTorch模型的保存和加載流程2021-10-10
Python文件遍歷os.walk()與os.listdir()使用及說明
這篇文章主要介紹了Python文件遍歷os.walk()與os.listdir()使用及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
python3+PyQt5圖形項(xiàng)的自定義和交互 python3實(shí)現(xiàn)page Designer應(yīng)用程序
這篇文章主要為大家詳細(xì)介紹了python3+PyQt5圖形項(xiàng)的自定義和交互,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04

