1. 程式人生 > 其它 >百度鮮花影象爬取

百度鮮花影象爬取

深度學習依賴大量的資料,除了使用公開的資料集之外就是利用Python的爬蟲技術自己收集和整理,爬蟲的本質是利用程式碼模擬瀏覽器向網頁發起請求,得到網站的相應進行分析從中獲取想要爬取的資料,本例子利用程式碼在百度圖片上搜索鮮花,將搜尋到的圖片儲存到本地。

首先對百度圖片搜尋鮮花頁面進行分析,圖片是不斷動態載入的,它是一個ajax請求,右鍵點選檢查項開啟網頁分析視窗,檢視新載入資料的URL及引數,引數中有queryWord和Word的值為搜尋框輸入的鮮花關鍵字,引數pn為從第幾張開始載入,rn為載入多少張圖片,將響應內容利用json解析工具進行解析,每張圖片的的地址在thumbURL中。

根據上面的分析設計設計函式get_param(keyword,paginator)根據輸入的關鍵字和頁數,生成請求引數;定義函式get_urls(url,params) 拼接形成每一頁的完整請求連結;定義函式get_image_url(urls,headers)獲取頁面響應,並轉換成json格式,json資料的data欄位中提取thumbURL欄位值即每張圖片的地址;定義函式get_image(keyword,image_url)請求圖片地址,將圖片資料下載到本地資料夾。

# 根據輸入的關鍵字和頁數,生成請求引數

def get_param(keyword,paginator):

keyword=urllib.parse.quote(keyword)  #對中文關鍵詞轉換編碼

params=[]

for i in range(1,paginator+1):

     # 因為頁面圖片是動圖載入的

params.append('tn=resultjson_com&logid=10338332981203604364&ipn=rj&ct=201326592&is=&fp=result&fr=&word={}&queryWord={}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&hd=&latest=&copyright=&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=1&expermode=&nojc=&isAsync=&pn={}&rn=30&gsm=78&1650241802208='.format(keyword,keyword,30*i))

return params

 

# 定義函式拼接形成每一頁的完整請求連結

def get_urls(url,params):

urls=[]

for param in params:

     urls.append(url+param)

return urls

 # 獲取頁面,將相應轉換成json格式,從data欄位提取每一張圖片的地址

def get_image_url(urls,headers):

image_url=[]

for url in urls:

     page_json=requests.get(url,headers=headers).json()

     page_data=page_json.get('data')

     for data in page_data:

          if data:

               image_url.append(data.get('thumbURL'))

return image_url

# 獲取圖片地址將圖片儲存到本地資料夾中

def get_image(keyword,image_url):

file_name=os.path.join('.',keyword)

print(file_name)

if not os.path.exists(file_name):

     os.mkdir(file_name)

for index,url in enumerate(image_url,start=1):

     with open(file_name+'/{}.jpg'.format(index),'wb')as f:

          f.write(requests.get(url,headers=headers).content)

          if index !=0 and index % 30==0:

               print('第{}頁下載完成'.format(index/30))

 if __name__=='__main__':

url='http://image.baidu.com/search/acjson?'

headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36'}

# 只需要修改下面的關鍵字和頁數,就爬取不同的百度影象

keyword='鮮花'   #定義關鍵字

paginator=2      #定義要爬取的頁數

params=get_param(keyword,paginator)

urls=get_urls(url,params)

image_urls=get_image_url(urls,headers)

get_image(keyword,image_urls)