如何爬取百度圖片的內容?
這和緩存沒有什么關系,百度圖片的信息是動態加載的,在一個json文件中,需要抓包分析,解析這個文件才能提取到圖片的url進行下載,下面我大概介紹一下如何抓取百度圖片url信息并進行下載,實驗環境win7+python3.6+pycharm,就是兩個函數,很簡單,先貼源碼吧,如下:
import requests
import json
import time
def getImageInfo():
'''獲取圖片url信息'''
image_urls=[] # 存儲圖片url信息
url='http://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&word=風景圖片大全&pn=60&rn=30'
response=requests.get(url=url) # 請求json文件
response.encoding='utf-8' # 設置編碼
data=json.loads(response.text).get('data') # 加載json文件
for item in data: # 獲取圖片下載url信息
if item.get('replaceUrl') and len(item.get('replaceUrl'))>1:
image_url=item.get('replaceUrl')[1].get('ObjURL') # 得到下載url
image_urls.append(image_url) # 插入image_urls中
return image_urls
def downloadImage():
'''下載圖片'''
image_urls=getImageInfo() # 獲取圖片url信息
for i in range(len(image_urls)):
try:
# 成功下載
content=requests.get(image_urls[i]).content # 獲取圖片(二進制信息)
image_file=open(r'F:\picture\baidu\%d.jpg' % (i+1),'wb') #創建jpg文件
image_file.write(content) #寫入文件
image_file.close() #關閉文件
print('第%d張圖片下載成功:%s' % (i+1,image_urls[i])) # 打印下載信息
time.sleep(1) # 暫停1秒,防止被識別
except Exception as e:
# 失敗下載
print('第%d張圖片下載失敗: %s' % (i+1, image_urls[i])) # 打印下載信息
print(e) # 打印異常信息
continue
if __name__=="__main__":
'''主函數'''
downloadImage()
下面介紹一下主要步驟:
1.抓包分析頁面。按F12調出開發者工具,刷新頁面,依次點擊"Network","XHR",和"Preview",就可看到動態加載的圖片信息,我這里以爬取百度圖片“風景圖片大全為例”,網址為http://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1522202517144_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&hs=2&word=風景圖片大全&f=3&oq=風景圖片大全&rsp=0,如下:
json文件的信息我們可以在開發者工具中看到,以下是json中的圖片信息,我們需要對這些數據進行提?。?/p>
對應的json文件url信息可以直接在"Headers"查看到,如圖:
2.下面我們就可以對json文件進行解析了。這里注意的是,url中并不是所有參數都有用,這里只需提出tn=resultjson_com&ipn=rj&word=風景圖片大全&pn=60&rn=30這幾個參數就行,核心是提取到第二個"ObjURL"信息,這個是圖片位置所在,主要代碼如下:
3.圖片信息提取成功后,我們就可以進行圖片的下載了,這里比較簡單,主要用到requests這個包,就是基本的文件寫入操作,只不過是二進制的寫入,主要代碼如下:
程序運行結果如下,已經打印出下載信息:
對應的圖片也已經下載在"F:\picture\baidu"這個目錄下邊:
這里有些圖片由于url已失效,所以下載后不能顯示。
至此,我們就完成了百度圖片信息的提取以及圖片的下載。整個過程來看,其實很簡單,就是抓包分析,獲取到json文件,然后解析,提取到自己需要的信息,最后就能進行圖片的下載,只要你有一定的python基礎,會基本python爬蟲,很快就能完成圖片信息的爬取和下載,網上也有很多這方面的資料,你可以搜一下,對你幫助一定很大,我這里不在贅述,希望以上分享的內容能對你有所幫助吧。