程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python爬蟲下載百度圖片

編輯:Python

首先進入百度圖片,這裡以卡莎為關鍵詞搜索。F12進入開發者模式,可以看到在我們不滾動的情況下只顯示了30張圖片,而我們向下滾動拉條時,出現了新的節點,也就是Ajax渲染的。

這時分析節點的url的構造參數,可以看到參數 “queryWord: 卡莎”
正是我們的關鍵詞,tn參數說明是這個網址的一個json文件。rn
是頁面顯示的圖片數。只有一個變化的參數pn,pn為0就是第一次加載的30張圖片,pn為30則為第二次加載的30張圖片以此類推。pn的變化規律為30*i。因此構造出網址的主要部分:
“https://image.baidu.com/search/acjson?”
參數部分可以利用params參數傳入。

def get_page():
url="https://image.baidu.com/search/acjson?"
headers = {

"User-Agent": ''}
params={

"tn":"resultjson_com",
"word":"卡莎",
"ipn":"rj" ,
"pn":0
}
r = requests.get(url,headers=headers,params=params)
return r.text

獲取到源代碼後可以利用re表達式獲取圖片網址。json文件中有多個圖片的url,我們需要匹配的也就是高清的是"objurl": 所對應的值,因此利用正則表達式,當然也可以用json直接獲取。這裡有用re

def get_img(html):
url_ls=re.findall('.*?"objURL":"(.*?)"',html,re.S)
for items in range(len(url_ls)):
image=requests.get(url_ls[items])
with open("圖片"+str(items+1)+".png","wb") as file:
file.write(image.content)

最後整合一下代碼,可以定義一個類,這樣可以搜索任何你要所搜的圖片。

import requests
import re
import os
import time
import json
class Baidupicture(object):
def __init__(self,keyword):
self.keyword=keyword
def get_dir(self):
os.mkdir(self.keyword)
#這裡是在你的工作路徑下創建一個文件夾用於存儲圖片 
os.chdir(r"文件夾工作路徑")
#這裡要將文件夾設置為你的工作路徑
def get_page(self,offset):
url="https://image.baidu.com/search/acjson?"
headers = {

"User-Agent": ''}
params={

"tn":"resultjson_com",
"word":self.keyword,
"ipn":"rj" ,
"pn":offset
}
r = requests.get(url,headers=headers,params=params)
return r.text
def get_img(self,html,offset):
#html即為獲取的json文件,offset為
url_ls=re.findall('.*?"objURL":"(.*?)"',html,re.S)
for items in range(len(url_ls)):
image=requests.get(url_ls[items])
with open("圖片"+str(offset+items+1)+".png","wb") as file:
file.write(image.content)
a=Baidupicture("卡莎")
a.get_dir()
for offset in [x for x in range(61) if x%30==0]:
html=a.get_page(offset)
a.get_img(html,offset)

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved