發(fā)現(xiàn)了很多很不錯(cuò)的關(guān)于Python、關(guān)于爬蟲的博客和書籍光涂。列舉如下,之后如果發(fā)現(xiàn)更好的拧烦,我也會(huì)補(bǔ)充上去忘闻。另外,因?yàn)榕老x用到的很多知識(shí)我之前都有過涉獵恋博,所以有的地方我懂的話筆記里就會(huì)一筆帶過齐佳,資料整理如下:
- Full Speed Python, 這本書很適合給有編程基礎(chǔ)的人入門债沮,它包含了Python基本的語法和對應(yīng)的習(xí)題炼吴,快速刷一遍能很快對Python有個(gè)了解。
- Python 3 教程疫衩,菜鳥教程也很錯(cuò)硅蹦,目錄分的很細(xì)歼狼,很淺顯也有對應(yīng)的例子袁波。
讀完這兩篇文檔后,我仍然推薦找一本專門講Python的書绣版,在繼續(xù)學(xué)習(xí)其他內(nèi)容時(shí)抽空將其慢慢讀一遍鲤拿,因?yàn)閷τ赑ython語言假褪,上述兩項(xiàng)只能說講了一些皮毛,而很多Python的特性以及編程技巧需要通過大量的系統(tǒng)化閱讀和練習(xí)才能做到信手拈來近顷,再者才能有所創(chuàng)新生音。
- Python3網(wǎng)絡(luò)爬蟲系列, 這個(gè)是我個(gè)人很推薦也是我即將照著學(xué)習(xí)的Python 爬蟲入門教程幕庐,本文剩下的內(nèi)容就是這系列的學(xué)習(xí)筆記久锥。
- 爬蟲代理服務(wù)家淤, 爬蟲進(jìn)階异剥。
- Python程序員, Python進(jìn)階,該作者還有列出了一個(gè)爬蟲進(jìn)階需要的資料絮重,可以關(guān)注他的公眾號(hào)獲得冤寿。
當(dāng)然還有萬法之宗——Python3.6.5官方文檔歹苦,以及其他零零碎碎搜索得到的資料就不贅述了。祝大家好運(yùn)督怜。
爬蟲和Urllib庫
安裝pip(pip 是 Python 包管理工具殴瘦,該工具提供了對Python 包的查找、下載号杠、安裝蚪腋、卸載的功能)
網(wǎng)絡(luò)爬蟲的定義
網(wǎng)絡(luò)爬蟲,也叫網(wǎng)絡(luò)蜘蛛(Web Spider)姨蟋,如果把互聯(lián)網(wǎng)比喻成一個(gè)蜘蛛網(wǎng)屉凯,Spider就是一只在網(wǎng)上爬來爬去的蜘蛛。網(wǎng)絡(luò)爬蟲就是根據(jù)網(wǎng)頁的地址來尋找網(wǎng)頁的眼溶,也就是URL悠砚。舉一個(gè)簡單的例子,我們在瀏覽器的地址欄中輸入的字符串就是URL堂飞,例如:https://www.baidu.com
URL就是同意資源定位符(Uniform Resource Locator)灌旧,它的一般格式如下(帶方括號(hào)[]的為可選項(xiàng)):
protocol :// hostname[:port] / path / [;parameters][?query]#fragment
URL的格式由三部分組成:
- protocol:第一部分就是協(xié)議,例如百度使用的就是https協(xié)議绰筛;
- hostname[:port]:第二部分就是主機(jī)名(還有端口號(hào)為可選參數(shù))枢泰,一般網(wǎng)站默認(rèn)的端口號(hào)為80,例如百度的主機(jī)名就是www.baidu.com别智,這個(gè)就是服務(wù)器的地址;
- path:第三部分就是主機(jī)資源的具體地址宗苍,如目錄和文件名等。
網(wǎng)絡(luò)爬蟲就是根據(jù)這個(gè)URL來獲取網(wǎng)頁信息的薄榛。
在Python3.x中讳窟,我們可以使用urlib這個(gè)組件抓取網(wǎng)頁,urllib是一個(gè)URL處理包敞恋,這個(gè)包中集合了一些處理URL的模塊丽啡,如下:
1.urllib.request模塊是用來打開和讀取URLs的;
2.urllib.error模塊包含一些有urllib.request產(chǎn)生的錯(cuò)誤硬猫,可以使用try進(jìn)行捕捉處理补箍;
3.urllib.parse模塊包含了一些解析URLs的方法;
4.urllib.robotparser模塊用來解析robots.txt文本文件.它提供了一個(gè)單獨(dú)的RobotFileParser類啸蜜,通過該類提供的can_fetch()方法測試爬蟲是否可以下載一個(gè)頁面坑雅。
我們使用urllib.request.urlopen()這個(gè)接口函數(shù)就可以很輕松的打開一個(gè)網(wǎng)站,讀取并打印信息衬横。
先來個(gè)簡單的
from urllib import request
import chardet #第三方庫chardet裹粤,它是用來判斷編碼的模塊
# 構(gòu)建Request
req = request.Request("https://www.guancha.cn/")
# 訪問頁面,并獲取從服務(wù)器的回應(yīng)蜂林,如果是HTTPS遥诉?
response = request.urlopen(req)
print (response.geturl() + '\n')
print (response.info())
print (response.getcode())
# 讀取頁面
html = response.read()
# 檢測頁面使用的編碼
charset = chardet.detect(html)
# 解碼:獲得易于閱讀的網(wǎng)頁源碼
html = html.decode(charset['encoding'])
結(jié)果:
C:\ProgramData\Anaconda3\python.exe "E:/大數(shù)據(jù)/hello world/urllib_test01.py"
https://www.guancha.cn/
Server: NWSs
Date: Sat, 23 Feb 2019 09:20:55 GMT
Content-Type: text/html
Content-Length: 239077
Connection: close
Cache-Control: max-age=60
Expires: Sat, 23 Feb 2019 09:21:54 GMT
Last-Modified: Sat, 23 Feb 2019 09:15:02 GMT
X-NWS-UUID-VERIFY: 94fe1429e739790b6f8a8475338d4874
X-NWS-LOG-UUID: b7c2b4e0-b930-4fa2-abcb-14d9b78a1337
X-Cache-Lookup: Hit From Disktank3
X-Daa-Tunnel: hop_count=2
X-Cache-Lookup: Hit From Inner Cluster
X-Cache-Lookup: Hit From Upstream
200
Process finished with exit code 0
這個(gè)程序中最后的html變量存儲(chǔ)了目標(biāo)網(wǎng)頁的源代碼打拇泣,經(jīng)過瀏覽器解析,它就會(huì)呈現(xiàn)出你在日常生活中常見的網(wǎng)頁矮锈。除此之外霉翔,關(guān)于網(wǎng)頁的META標(biāo)簽和HTTP協(xié)議的狀態(tài)碼,就不贅述了苞笨,有興趣的話可以讀一下HTTP協(xié)議的RFC文檔: RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1 - IETF Tools债朵,相信我,通讀之后會(huì)覺得神清氣爽瀑凝。這可算是爬蟲界的Hello World程序了葱弟。