十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
Python如何寫(xiě)出最簡(jiǎn)單的網(wǎng)頁(yè)爬蟲(chóng),針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
昆山ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書(shū)銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書(shū)合作)期待與您的合作!
最近對(duì)python爬蟲(chóng)有了強(qiáng)烈地興趣,在此分享自己的學(xué)習(xí)路徑。
1.開(kāi)發(fā)工具
筆者使用的工具是sublime text3,它的短小精悍(可能男人們都不喜歡這個(gè)詞)使我十分著迷。推薦大家使用,當(dāng)然如果你的電腦配置不錯(cuò),pycharm可能更加適合你。
sublime text3搭建python開(kāi)發(fā)環(huán)境推薦查看此博客:
[sublime搭建python開(kāi)發(fā)環(huán)境][http://www.cnblogs.com/codefish/p/4806849.html]
2.爬蟲(chóng)介紹
爬蟲(chóng)顧名思義,就是像蟲(chóng)子一樣,爬在Internet這張大網(wǎng)上。如此,我們便可以獲取自己想要的東西。
既然要爬在Internet上,那么我們就需要了解URL,法號(hào)“統(tǒng)一資源定位器”,小名“鏈接”。其結(jié)構(gòu)主要由三部分組成:
(1)協(xié)議:如我們?cè)诰W(wǎng)址中常見(jiàn)的HTTP協(xié)議。
(2)域名或者IP地址:域名,如:www.baidu.com,IP地址,即將域名解析后對(duì)應(yīng)的IP。
(3)路徑:即目錄或者文件等。
3.urllib開(kāi)發(fā)最簡(jiǎn)單的爬蟲(chóng)
(1)urllib簡(jiǎn)介
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)開(kāi)發(fā)最簡(jiǎn)單的爬蟲(chóng)
百度首頁(yè)簡(jiǎn)潔大方,很適合我們爬蟲(chóng)。
爬蟲(chóng)代碼如下:
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é)果如下圖:
我們可以通過(guò)在百度首頁(yè)空白處右擊,查看審查元素來(lái)和我們的運(yùn)行結(jié)果對(duì)比。
當(dāng)然,request也可以生成一個(gè)request對(duì)象,這個(gè)對(duì)象可以用urlopen方法打開(kāi)。
代碼如下:
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ò)誤處理通過(guò)urllib模塊來(lái)處理,主要有URLError和HTTPError錯(cuò)誤,其中HTTPError錯(cuò)誤是URLError錯(cuò)誤的子類,即HTTRPError也可以通過(guò)URLError捕獲。
HTTPError可以通過(guò)其code屬性來(lái)捕獲。
處理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可以通過(guò)其reason屬性來(lái)捕獲。
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ò)誤都寫(xiě)入代碼中,畢竟越細(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來(lái)查看各種錯(cuò)誤的輸出形式。
關(guān)于Python如何寫(xiě)出最簡(jiǎn)單的網(wǎng)頁(yè)爬蟲(chóng)問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。