大數據

python爬蟲AJAX數據爬取和HTTPS訪問 | python爬蟲實戰之四

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

python爬蟲AJAX數據爬取和HTTPS訪問

我們首先需要對之前所接觸的爬蟲的概念,爬取流程、爬蟲標準庫等內容做一個回顧。
通常我們在大多數情況下編寫的爬蟲都為聚焦爬蟲。
接下來我們通過豆瓣電影來處理JSON數據。

處理JSON數據

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

image.png

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

image.png
image.png

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

image.png

然後複製地址進行操作分析。

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

image.png

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

執行結果:

image.png

此時就可以獲取到內容了,那麼我們有必要將爬蟲封裝嗎?
因為每個企業處理的方式可能會不太一樣,返回的數據有可能是html,也有可能是JSON。所以說處理的方式必須一致,或者把函數封裝在一個方法中才是我們需要思考的重點。往往我們會為一些特定數據、特定網站寫一個特定的爬蟲。因為,每一個網站的分析和提取方式可能是不一樣的。現在我們只是簡單做了一個JSON的處理。但如果是網頁解析,則是會非常麻煩的,尤其是網頁一旦更換網頁模板,我們則需要重新去寫網頁的解析方式。

HTTPS證書忽略

HTTPS使用SSL安全套接層協議, 在傳輸層對網絡數據進行加密。HTTPS使用的時候需要證書, 而證書需要CA認證。
CA(Certificate Authority) 是數字證書認證中心的簡稱, 是指發放、管理、廢除數字證書的機構。
CA是受信任的第三方,有CA簽發的證書具有可信性。如果用戶由於信任了CA簽發的證書導致的損失,可以追究CA的法律責任。
CA是層級結構,下級CA信任上級CA,且有上級CA頒發給下級CA證書並認證。
一些網站, 例如淘寶, 使用HTTPS加密數據更加安全。
我們來進行對一個網站的爬取:

image.png

執行結果:

image.png
image.png

我們去嘗試訪問百度,是否可以呢?
修改代碼:

image.png

執行結果:

image.png

通過HTTPS訪問12306的時候, 失敗的原因在於12306的證書未通過CA認證, 它是自己生成的證書, 不可信。而其它網站訪問,如https://www.baidu.com/ 並沒有提示的原因,它的證書的發行者受信任,且早就存儲在當前系統中。

能否像瀏覽器一樣,忽略證書不安全信息呢?
導入ssl模塊:

image.png

執行結果:

image.png

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

配套視頻課程,點擊這裡查看

獲取更多資源請訂閱Python學習站

Leave a Reply

Your email address will not be published. Required fields are marked *