文章目錄
(免費學習推薦:python影片教學)
#一、前言
##之前爬取了很多靜態網頁的內容,包括:小說、圖片等等,今天我來嘗試動態網頁的爬取。眾所周知,百度圖片就是一個動態網頁。那麼,衝!衝! !衝! ! !二、需要匯入的函式庫
import requestsimport jsonimport os
三、實作過程
1、下載連結分析首先,打開百度,搜尋一個內容,這裡搜尋的是男神(本人 )-彭于晏
然後,打開抓包工具,選擇
XHR選項,按Ctrl R,然後你會發現,隨著你滑鼠的滑動,右側會出現一個又一個的資料包。
(這裡沒滑太多,一開始因為滑動太多,錄製的GIF超5M了)
這裡有很多很多的參數,我也不知道具體哪些是可以忽略的,後文就索性全複製下來了,具體看後文。
到這裡,能夠直接觀察到的內容就結束了,接下來,借助程式碼,幫我們打開另一個世界的大門
衝就完事了! 2、程式碼分析首先:把上述中的「其它參數」組在一起。
自己做的話,最好複製自己的「其它參數」。在
之後,我們可以先提取一下試試,並且把編碼格式改成'utf-8'
url = 'https://image.baidu.com/search/acjson?' param = { 'tn': 'resultjson_com', 'logid': ' 7517080705015306512', 'ipn': 'rj', 'ct': '201326592', 'is': '', 'fp': 'result', 'queryWord': '彭于晏', 'cl': '2', 'lm': '-1', 'ie': 'utf-8', 'oe': 'utf-8', 'adpicid': '', 'st': '', 'z': '', 'ic': '', 'hd': '', 'latest': '', 'copyright': '', 'word': '彭于晏', 's': '', 'se': '', 'tab': '', 'width': '', 'height': '', 'face': '', 'istype': '', 'qc': '', 'nc': '1', 'fr': '', 'expermode': '', 'force': '', 'cg': 'star', 'pn': '30', 'rn': '30', 'gsm': '1e', } # 将编码形式转换为utf-8 response = requests.get(url=url, headers=header, params=param) response.encoding = 'utf-8' response = response.text print(response)
看上去挺亂的哈,沒事,我們給包裝一下!
# 把字符串转换成json数据 data_s = json.loads(response) print(data_s)
和上面相比,已經明晰很多了,但依舊不夠明確,為什麼呢?因為它印刷的格式不方便我們觀看!
對此,有兩種解決辦法。
①導入pprint庫,接著輸入
pprint.pprint(data_s),就能列印啦,如下圖
#②使用json線上解析器(自行百度),結果如下:
解決掉上一步,我們會發現,想要的資料都在data裡面!
那就提取吧!
a = data_s["data"] for i in range(len(a)-1): # -1是为了去掉上面那个空数据 data = a[i].get("thumbURL", "not exist") print(data)
結果如下:
到這裡,已經成功90%啦,剩下的就是儲存和最佳化程式碼了! 3、完整程式碼######這部分和上面有些許不同,仔細看看就會發現嗷! #### -*- coding: UTF-8 -*-""" @Author :远方的星 @Time : 2021/2/27 17:49 @CSDN :https://blog.csdn.net/qq_44921056 @腾讯云 : https://cloud.tencent.com/developer/user/8320044 """import requestsimport jsonimport osimport pprint# 创建一个文件夹path = 'D:/百度图片'if not os.path.exists(path): os.mkdir(path)# 导入一个请求头header = { 'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'}# 用户(自己)输入信息指令keyword = input('请输入你想下载的内容:')page = input('请输入你想爬取的页数:')page = int(page) + 1n = 0pn = 1# pn代表从第几张图片开始获取,百度图片下滑时默认一次性显示30张for m in range(1, page): url = 'https://image.baidu.com/search/acjson?' param = { 'tn': 'resultjson_com', 'logid': ' 7517080705015306512', 'ipn': 'rj', 'ct': '201326592', 'is': '', 'fp': 'result', 'queryWord': keyword, 'cl': '2', 'lm': '-1', 'ie': 'utf-8', 'oe': 'utf-8', 'adpicid': '', 'st': '', 'z': '', 'ic': '', 'hd': '', 'latest': '', 'copyright': '', 'word': keyword, 's': '', 'se': '', 'tab': '', 'width': '', 'height': '', 'face': '', 'istype': '', 'qc': '', 'nc': '1', 'fr': '', 'expermode': '', 'force': '', 'cg': 'star', 'pn': pn, 'rn': '30', 'gsm': '1e', } # 定义一个空列表,用于存放图片的URL image_url = list() # 将编码形式转换为utf-8 response = requests.get(url=url, headers=header, params=param) response.encoding = 'utf-8' response = response.text # 把字符串转换成json数据 data_s = json.loads(response) a = data_s["data"] # 提取data里的数据 for i in range(len(a)-1): # 去掉最后一个空数据 data = a[i].get("thumbURL", "not exist") # 防止报错key error image_url.append(data) for image_src in image_url: image_data = requests.get(url=image_src, headers=header).content # 提取图片内容数据 image_name = '{}'.format(n+1) + '.jpg' # 图片名 image_path = path + '/' + image_name # 图片保存路径 with open(image_path, 'wb') as f: # 保存数据 f.write(image_data) print(image_name, '下载成功啦!!!') f.close() n += 1 pn += 29
#大量免費學習推薦,請造訪python教學(影片)
以上是python爬蟲:隨心所欲地爬取百度圖片的詳細內容。更多資訊請關注PHP中文網其他相關文章!