php爬去百度图片,python爬虫:随心所欲地爬取百度图片
文章目錄一、前言
二、需要導(dǎo)入的庫
三、實(shí)現(xiàn)過程
1、下載鏈接分析
2、代碼分析
3、完整代碼
四、Blogger's speech
一、前言
之前爬取了很多靜態(tài)網(wǎng)頁的內(nèi)容,包括:小說、圖片等等,今天我來嘗試一下動(dòng)態(tài)網(wǎng)頁的爬取。眾所周知,百度圖片就是一個(gè)動(dòng)態(tài)網(wǎng)頁。那么,沖!沖!!沖!!!
二、需要導(dǎo)入的庫import requestsimport jsonimport os
三、實(shí)現(xiàn)過程
1、下載鏈接分析
首先,打開百度,搜索一個(gè)內(nèi)容,這里搜索的是男神(本人 )——彭于晏
然后,打開抓包工具,選擇XHR選項(xiàng),按Ctrl+R,然后你會(huì)發(fā)現(xiàn),隨著你鼠標(biāo)的滑動(dòng),右側(cè)會(huì)出現(xiàn)一個(gè)又一個(gè)的數(shù)據(jù)包。
(這里沒滑動(dòng)太多,一開始因?yàn)榛瑒?dòng)太多,錄的GIF超5M了)
然后,選一個(gè)包,查看它的headers,如圖:
截取之后,粘貼在記事本上,作為一個(gè)URL,后文會(huì)用到。
這里有很多很多的參數(shù),我也不知道具體哪些是可以忽略的,后文就索性全復(fù)制下來了,具體看后文。
到這里,能夠直接觀察到的內(nèi)容就結(jié)束了,接下來,借助代碼,幫我們打開另一個(gè)世界的大門
沖就完事了!
2、代碼分析
首先:把上述中的“其它參數(shù)”組在一起。
自己做的話,最好復(fù)制自己的“其它參數(shù)”。
之后,我們可以先提取一下試試,并且把編碼格式改成'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',
}
# 將編碼形式轉(zhuǎn)換為utf-8
response = requests.get(url=url, headers=header, params=param)
response.encoding = 'utf-8'
response = response.text print(response)
運(yùn)行結(jié)果如下:
看上去挺亂的哈,沒事,我們給包裝一下!
在上面的基礎(chǔ)上加上:# 把字符串轉(zhuǎn)換成json數(shù)據(jù)
data_s = json.loads(response)
print(data_s)
運(yùn)行結(jié)果如下:
和上面相比,已經(jīng)明晰很多了,但依舊不夠明確,為什么呢?因?yàn)樗蛴〉母袷讲环奖阄覀冇^看!
對(duì)此,有兩種解決辦法。
①導(dǎo)入pprint庫,接著輸入pprint.pprint(data_s),就能打印啦,如下圖
②使用json在線解析器(自行百度),結(jié)果如下:
解決掉上一步,我們會(huì)發(fā)現(xiàn),想要的數(shù)據(jù)都在data里面!
那么就提取吧!a = data_s["data"]
for i in range(len(a)-1): # -1是為了去掉上面那個(gè)空數(shù)據(jù)
data = a[i].get("thumbURL", "not exist")
print(data)
結(jié)果如下:
到這里,已經(jīng)成功90%啦,剩下的就是保存和優(yōu)化代碼了!
3、完整代碼
這部分和上面有些許不同,仔細(xì)看看就會(huì)發(fā)現(xiàn)嗷!# -*- coding: UTF-8 -*-"""
@Author :遠(yuǎn)方的星
@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# 創(chuàng)建一個(gè)文件夾path = 'D:/百度圖片'if not os.path.exists(path):
os.mkdir(path)# 導(dǎo)入一個(gè)請(qǐng)求頭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('請(qǐng)輸入你想下載的內(nèi)容:')page = input('請(qǐng)輸入你想爬取的頁數(shù):')page = int(page) + 1n = 0pn = 1# pn代表從第幾張圖片開始獲取,百度圖片下滑時(shí)默認(rèn)一次性顯示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',
}
# 定義一個(gè)空列表,用于存放圖片的URL
image_url = list()
# 將編碼形式轉(zhuǎn)換為utf-8
response = requests.get(url=url, headers=header, params=param)
response.encoding = 'utf-8'
response = response.text # 把字符串轉(zhuǎn)換成json數(shù)據(jù)
data_s = json.loads(response)
a = data_s["data"] # 提取data里的數(shù)據(jù)
for i in range(len(a)-1): # 去掉最后一個(gè)空數(shù)據(jù)
data = a[i].get("thumbURL", "not exist") # 防止報(bào)錯(cuò)key error
image_url.append(data)
for image_src in image_url:
image_data = requests.get(url=image_src, headers=header).content # 提取圖片內(nèi)容數(shù)據(jù)
image_name = '{}'.format(n+1) + '.jpg' # 圖片名
image_path = path + '/' + image_name # 圖片保存路徑
with open(image_path, 'wb') as f: # 保存數(shù)據(jù)
f.write(image_data)
print(image_name, '下載成功啦!!!')
f.close()
n += 1
pn += 29
運(yùn)行結(jié)果如下:
友情提示:
①:一頁是30張
②:輸入的內(nèi)容可以很多變:比如橋、月亮、太陽、胡歌、趙麗穎等等。
四、Blogger’s speech
希望大家可以,點(diǎn)贊、關(guān)注、收藏,三連支持一下!大量免費(fèi)學(xué)習(xí)推薦,敬請(qǐng)?jiān)L問python教程(視頻)
總結(jié)
以上是生活随笔為你收集整理的php爬去百度图片,python爬虫:随心所欲地爬取百度图片的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全球首枚3D打印火箭!美国“人族一号”发
- 下一篇: canonpg741打印机怎么用