python爬蟲URL編碼和GETPOST請求 | python爬蟲實戰之三
python爬蟲AJAX資料爬取和HTTPS通路
我們首先需要對之前所接觸的爬蟲的概念,爬取流程、爬蟲标準庫等内容做一個回顧。
通常我們在大多數情況下編寫的爬蟲都為聚焦爬蟲。
接下來我們通過豆瓣電影來處理JSON資料。
處理JSON資料
檢視“豆瓣電影”,看到”最近熱門電影”的“熱門”。

右鍵“審查元素”,找到“Network”,重新整理一下。
我們可以看到很多的内容,我們針對熱門電影這一部分進行分析。
然後複制位址進行操作分析。
通過分析, 我們知道這部分内容, 是通過AJAX從背景拿到的Json資料。
通路的URL是
https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&page_limit=50&page_start=0
其中
%E7%83%AD%E9%97%A8
是utf-8編碼的中文“熱門”
伺服器傳回的JSON資料如下:
輪播元件,共需要50條資料。
其中url的表示如下:
tag标簽”熱門”,表示熱門電影
type資料類型, movie是電影
page_limit表示傳回資料的總數
page_start表示資料偏移
我們可以設定
page_limit=10&page_start=10
的值。
from urllib.parse import urlencode
from urllib.request import urlopen, Request
import simplejson
ua = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36"
jurl = 'https://movie.douban.com/j/search_subjects'
d = {
'type':'movie',
'tag':'熱門',
'page_limit':10,
'page_start':10
}
req = Request('{}?{}'.format(jurl, urlencode(d)), headers={
'User-agent':ua
})
with urlopen(req) as res:
subjects = simplejson.loads(res.read())
print(len(subjects['subjects']))
print(subjects)
執行結果:
此時就可以擷取到内容了,那麼我們有必要将爬蟲封裝嗎?
因為每個企業處理的方式可能會不太一樣,傳回的資料有可能是html,也有可能是JSON。是以說處理的方式必須一緻,或者把函數封裝在一個方法中才是我們需要思考的重點。往往我們會為一些特定資料、特定網站寫一個特定的爬蟲。因為,每一個網站的分析和提取方式可能是不一樣的。現在我們隻是簡單做了一個JSON的處理。但如果是網頁解析,則是會非常麻煩的,尤其是網頁一旦更換網頁模闆,我們則需要重新去寫網頁的解析方式。
HTTPS證書忽略
HTTPS使用SSL安全套接層協定, 在傳輸層對網絡資料進行加密。HTTPS使用的時候需要證書, 而證書需要CA認證。
CA(Certificate Authority) 是數字證書認證中心的簡稱, 是指發放、管理、廢除數字證書的機構。
CA是受信任的第三方,有CA簽發的證書具有可信性。如果使用者由于信任了CA簽發的證書導緻的損失,可以追究CA的法律責任。
CA是層級結構,下級CA信任上級CA,且有上級CA頒發給下級CA憑證并認證。
一些網站, 例如淘寶, 使用HTTPS加密資料更加安全。
我們來進行對一個網站的爬取:
我們去嘗試通路百度,是否可以呢?
修改代碼:
通過HTTPS通路12306的時候, 失敗的原因在于12306的證書未通過CA認證, 它是自己生成的證書, 不可信。而其它網站通路,如
https://www.baidu.com/并沒有提示的原因,它的證書的發行者受信任,且早就存儲在目前系統中。
能否像浏覽器一樣,忽略證書不安全資訊呢?
導入ssl子產品:
這樣,我們就可以通過這樣的方式去通路類似的網站了。
配套視訊課程,點選這裡檢視
擷取更多資源請訂閱
Python學習站