天天看點

python爬蟲AJAX資料爬取和HTTPS通路 | python爬蟲實戰之四

python爬蟲URL編碼和GETPOST請求 | python爬蟲實戰之三

python爬蟲AJAX資料爬取和HTTPS通路

我們首先需要對之前所接觸的爬蟲的概念,爬取流程、爬蟲标準庫等内容做一個回顧。

通常我們在大多數情況下編寫的爬蟲都為聚焦爬蟲。

接下來我們通過豆瓣電影來處理JSON資料。

處理JSON資料

檢視“豆瓣電影”,看到”最近熱門電影”的“熱門”。

python爬蟲AJAX資料爬取和HTTPS通路 | python爬蟲實戰之四

右鍵“審查元素”,找到“Network”,重新整理一下。

python爬蟲AJAX資料爬取和HTTPS通路 | python爬蟲實戰之四
python爬蟲AJAX資料爬取和HTTPS通路 | python爬蟲實戰之四

我們可以看到很多的内容,我們針對熱門電影這一部分進行分析。

python爬蟲AJAX資料爬取和HTTPS通路 | python爬蟲實戰之四

然後複制位址進行操作分析。

通過分析, 我們知道這部分内容, 是通過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資料如下:

python爬蟲AJAX資料爬取和HTTPS通路 | python爬蟲實戰之四

輪播元件,共需要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)           

執行結果:

python爬蟲AJAX資料爬取和HTTPS通路 | python爬蟲實戰之四

此時就可以擷取到内容了,那麼我們有必要将爬蟲封裝嗎?

因為每個企業處理的方式可能會不太一樣,傳回的資料有可能是html,也有可能是JSON。是以說處理的方式必須一緻,或者把函數封裝在一個方法中才是我們需要思考的重點。往往我們會為一些特定資料、特定網站寫一個特定的爬蟲。因為,每一個網站的分析和提取方式可能是不一樣的。現在我們隻是簡單做了一個JSON的處理。但如果是網頁解析,則是會非常麻煩的,尤其是網頁一旦更換網頁模闆,我們則需要重新去寫網頁的解析方式。

HTTPS證書忽略

HTTPS使用SSL安全套接層協定, 在傳輸層對網絡資料進行加密。HTTPS使用的時候需要證書, 而證書需要CA認證。

CA(Certificate Authority) 是數字證書認證中心的簡稱, 是指發放、管理、廢除數字證書的機構。

CA是受信任的第三方,有CA簽發的證書具有可信性。如果使用者由于信任了CA簽發的證書導緻的損失,可以追究CA的法律責任。

CA是層級結構,下級CA信任上級CA,且有上級CA頒發給下級CA憑證并認證。

一些網站, 例如淘寶, 使用HTTPS加密資料更加安全。

我們來進行對一個網站的爬取:

python爬蟲AJAX資料爬取和HTTPS通路 | python爬蟲實戰之四
python爬蟲AJAX資料爬取和HTTPS通路 | python爬蟲實戰之四
python爬蟲AJAX資料爬取和HTTPS通路 | python爬蟲實戰之四

我們去嘗試通路百度,是否可以呢?

修改代碼:

python爬蟲AJAX資料爬取和HTTPS通路 | python爬蟲實戰之四
python爬蟲AJAX資料爬取和HTTPS通路 | python爬蟲實戰之四

通過HTTPS通路12306的時候, 失敗的原因在于12306的證書未通過CA認證, 它是自己生成的證書, 不可信。而其它網站通路,如

https://www.baidu.com/

并沒有提示的原因,它的證書的發行者受信任,且早就存儲在目前系統中。

能否像浏覽器一樣,忽略證書不安全資訊呢?

導入ssl子產品:

python爬蟲AJAX資料爬取和HTTPS通路 | python爬蟲實戰之四
python爬蟲AJAX資料爬取和HTTPS通路 | python爬蟲實戰之四

這樣,我們就可以通過這樣的方式去通路類似的網站了。

配套視訊課程,點選這裡檢視

擷取更多資源請訂閱

Python學習站