python3網路爬蟲開發實戰_Python 3開發網路爬蟲(一)
選擇Python版本
有2和3兩個版本, 3比較新, 聽說改動大. 根據我在知乎上搜集的觀點來看, 我還是傾向於使用”在趨勢中將會越來越火”的版本, 而非”目前已經很穩定而且很成熟”的版本. 這是個人喜好, 而且預測不一定準確. 但是如果Python3無法像Python2那麼火, 那麼整個Python語言就不可避免的隨著時間的推移越來越落後, 因此我想其實選哪個的最壞風險都一樣, 但是最好回報卻是Python3的大. 其實兩者區別也可以說大也可以說不大, 最終都不是什麼大問題. 我選擇的是Python 3.
選擇參考資料
由於我是一邊學一邊寫, 而不是我完全學會了之後才開始很有條理的寫, 所以參考資料就很重要(本來應該是個人開發經驗很重要, 但我是零基礎).Python學習資料免費獲取
一個簡單的虛擬碼
以下這個簡單的虛擬碼用到了set和queue這兩種經典的資料結構, 集與佇列. 集的作用是記錄那些已經訪問過的頁面, 佇列的作用是進行廣度優先搜尋.
queue Q
set S
StartPoint = "http://jecvay.com"
Q.push(StartPoint) # 經典的BFS開頭
S.insert(StartPoint) # 訪問一個頁面之前先標記他為已訪問
while (Q.empty() == false) # BFS迴圈體
T = Q.top() # 並且pop
for point in PageUrl(T) # PageUrl(T)是指頁面T中所有url的集合, point是這個集合中的一個元素.
if (point not in S)
Q.push(point)
S.insert(point)
這個虛擬碼不能執行, 我覺得我寫的有的不倫不類, 不類Python也不類C++.. 但是我相信看懂是沒問題的, 這就是個最簡單的BFS結構. 我是看了知乎裡面的那個虛擬碼之後, 自己用我的風格寫了一遍. 你也需要用你的風格寫一遍.
這裡用到的Set其內部原理是採用了Hash表, 傳統的Hash對爬蟲來說佔用空間太大, 因此有一種叫做Bloom Filter的資料結構更適合用在這裡替代Hash版本的set. 我打算以後再看這個資料結構怎麼使用, 現在先跳過, 因為對於零基礎的我來說, 這不是重點.
程式碼實現(一): 用Python抓取指定頁面
我使用的編輯器是Idle, 安裝好Python3後這個編輯器也安裝好了, 小巧輕便, 按一個F5就能執行並顯示結果. 程式碼如下:
#encoding:UTF-8
import urllib.request
url = "http://www.baidu.com"
data = urllib.request.urlopen(url).read()
data = data.decode('UTF-8')
print(data)
urllib.request是一個庫, 隸屬urllib. 點此開啟官方相關文件. 官方文件應該怎麼使用呢? 首先點剛剛提到的這個連結進去的頁面有urllib的幾個子庫, 我們暫時用到了request, 所以我們先看urllib.request部分. 首先看到的是一句話介紹這個庫是幹什麼用的:
The urllib.request module defines functions and classes which help in opening URLs (mostly HTTP) in a complex world — basic and digest authentication, redirections, cookies and more.
然後把我們程式碼中用到的urlopen()函式部分閱讀完.
urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False)
重點部分是返回值, 這個函式返回一個 http.client.HTTPResponse 物件, 這個物件又有各種方法, 比如我們用到的read()方法, 這些方法都可以根據官方文件的連結鏈過去. 根據官方文件所寫, 我用控制檯執行完畢上面這個程式後, 又繼續執行如下程式碼, 以更熟悉這些亂七八糟的方法是幹什麼的.
>>> a = urllib.request.urlopen(full_url)
>>> type(a)
<class ‘http.client.HTTPResponse’>
>>> a.geturl()
‘ http://www. baidu.com/s? word=Jecvay ’
>>> http:// a.info()
<http.client.HTTPMessage object at 0x03272250>
>>> a.getcode()
200
程式碼實現(二): 用Python簡單處理URL
如果要抓取百度上面搜尋關鍵詞為Jecvay Notes的網頁, 則程式碼如下
import urllib
import urllib.request
data={}
data['word']='Jecvay Notes'
url_values=urllib.parse.urlencode(data)
url="http://www.baidu.com/s?"
full_url=url+url_values
data=urllib.request.urlopen(full_url).read()
data=data.decode('UTF-8')
print(data)
data是一個字典, 然後通過urllib.parse.urlencode()來將data轉換為 ‘word=Jecvay+Notes’的字串, 最後和url合併為full_url, 其餘和上面那個最簡單的例子相同. 關於urlencode(), 同樣通過官方文件學習一下他是幹什麼的. 通過檢視
- urllib.parse.urlencode(query, doseq=False, safe=”, encoding=None, errors=None)
- urllib.parse.quote_plus(string, safe=”, encoding=None, errors=None)
大概知道他是把一個通俗的字串, 轉化為url格式的字串。
( 轉載自: Jecvay Notes )
相關文章
- python3網路爬蟲開發實戰_Python3 爬蟲實戰Python爬蟲
- 《Python3網路爬蟲開發實戰》教程||爬蟲教程Python爬蟲
- Python3網路爬蟲開發實戰Python爬蟲
- [Python3網路爬蟲開發實戰] 分散式爬蟲原理Python爬蟲分散式
- python3網路爬蟲開發實戰pdfPython爬蟲
- 《Python3網路爬蟲開發實戰》開源啦!Python爬蟲
- 《python3網路爬蟲開發實戰》--pyspiderPython爬蟲IDE
- Python 3網路爬蟲開發實戰Python爬蟲
- [Python3網路爬蟲開發實戰] Charles 的使用Python爬蟲
- [Python3網路爬蟲開發實戰] --Splash的使用Python爬蟲
- 《Python3 網路爬蟲開發實戰》—學習筆記Python爬蟲筆記
- Python3網路爬蟲開發實戰(第二版)Python爬蟲
- Python3網路爬蟲開發實戰——第1章 開發環境Python爬蟲開發環境
- [Python3網路爬蟲開發實戰] 2-爬蟲基礎 2-網頁基礎Python爬蟲網頁
- 面前最全《崔慶才python3網路爬蟲開發實戰》Python爬蟲
- 《Python3網路爬蟲開發實戰程式碼》基本庫使用Python爬蟲
- 《Python3網路爬蟲開發實戰》抽獎贈書活動Python爬蟲
- 《Python 3網路爬蟲開發實戰》chapter3Python爬蟲APT
- 讀書筆記:《Python3網路爬蟲開發實戰》——第2章:爬蟲基礎筆記Python爬蟲
- 我的爬蟲入門書 —— 《Python3網路爬蟲開發實戰(第二版)》爬蟲Python
- 網路爬蟲——爬蟲實戰(一)爬蟲
- python3 網路爬蟲開發實戰 貓眼top100Python爬蟲
- 【閱讀筆記】《Python3網路爬蟲開發實戰》PDF文件筆記Python爬蟲
- python3網路爬蟲開發實戰【高清掃描帶目錄】Python爬蟲
- Python3 大型網路爬蟲實戰 001 --- 搭建開發環境Python爬蟲開發環境
- Python3網路爬蟲開發實戰——第3章 基本庫的使用Python爬蟲
- [Python3網路爬蟲開發實戰] 2-爬蟲基礎 1-HTTP基本原理Python爬蟲HTTP
- python3網路爬蟲開發實戰-線上版-可複製貼上Python爬蟲
- 《網路爬蟲開發實戰案例》筆記爬蟲筆記
- Python3網路爬蟲快速入門實戰解析(一小時入門 Python 3 網路爬蟲)Python爬蟲
- [Python3網路爬蟲開發實戰] 2-爬蟲基礎 5-代理的基本原理Python爬蟲
- 【Python3網路爬蟲開發實戰】3.4-抓取貓眼電影排行Python爬蟲
- python3網路爬蟲開發實戰(配置踩坑及學習備忘)Python爬蟲
- 《Python3網路爬蟲開發實戰(第二版)》內容介紹Python爬蟲
- 【Python3網路爬蟲開發實戰】4-解析庫的使用-3 使用pyqueryPython爬蟲
- Python大型網路爬蟲專案開發實戰(全套)Python爬蟲
- 網路爬蟲開發常用框架爬蟲框架
- C#網路爬蟲開發C#爬蟲