python爬蟲之爬取動態加載的圖片_百度

運行壞境

python3.xhtml

選擇目標——百度

當咱們在使用右鍵查看網頁源碼時,出來的倒是一大堆JavaScript代碼,並無圖片的連接等信息python

由於它是一個動態頁面嘛。它的網頁原始數據實際上是沒有這個圖片的,經過運行JavaScript,把這個圖片數據把它插入到網頁的html標籤裏面json

那這樣形成的結果是,咱們在開發者工具中雖然能看到這個html標籤,但實際上,當咱們在看網頁的原始數據的時候,實際上是沒有這個標籤的,它只在運行時加載和渲染python3.x

進行抓包就行了,咱們點擊Network–XHR,而後咱們在往下滑動滾動條時,會一直出現一個名爲:acjson?tn=resultjson&ipn=…的請求,點擊它再點Preview,咱們看到這是一條json數據,點開data,咱們看到這裏面有30條數據,每一條都對應着一張圖片。app

以下:工具

 

 

因而咱們就清楚了,百度圖片一開始只加載30張圖片,當咱們往下滑動滾動條時,頁面會動態加載json數據,每條json數據裏面包含了30條信息,信息裏面又包含了圖片的URL,JavaScript會將這些url解析並顯示出來。這樣,每次滾動到底就又多出30張圖片。url

那麼,這些一直出現的json數據有什麼規律呢?spa

咱們點擊Headers,而後對比這些json數據的頭部信息。code

經過對比,咱們發現headers下的Query String Parameters中的字段大多保持不變,只有pn字段保持以30爲步長遞增htm

比較

總結

import requestsimport osdef getManyPages(keyword,pages):    params=[]    for i in range(30,30*pages+30,30):        params.append({                      'tn': 'resultjson_com',                      'ipn': 'rj',                      'ct': 201326592,                      'is': '',                      'fp': 'result',                      'queryWord': keyword,                      'cl': 2,                      'lm': -1,                      'ie': 'utf-8',                      'oe': 'utf-8',                      'adpicid': '',                      'st': -1,                      'z': '',                      'ic': 0,                      'word': keyword,                      's': '',                      'se': '',                      'tab': '',                      'width': '',                      'height': '',                      'face': 0,                      'istype': 2,                      'qc': '',                      'nc': 1,                      'fr': '',                      'pn': i,                      'rn': 30,                      'gsm': '1e',                      '1488942260214': ''                  })    url = 'https://image.baidu.com/search/acjson'    urls = []    for i in params:        urls.append(requests.get(url,params=i).json().get('data'))    return urlsdef getImg(dataList, localPath):    if not os.path.exists(localPath):  # 新建文件夾        os.mkdir(localPath)    x = 0    for list in dataList:        for i in list:            if i.get('thumbURL') != None:                print('正在下載:%s' % i.get('thumbURL'))                ir = requests.get(i.get('thumbURL'))                open(localPath + '%d.jpg' % x, 'wb').write(ir.content)                x += 1            else:                print('圖片連接不存在')if __name__ == '__main__':    dataList = getManyPages('風景',10)  # 參數1:關鍵字,參數2:要下載的頁數    getImg(dataList,'*********') # 參數2:指定保存的路徑
相關文章
相關標籤/搜索