天天看點

python爬蟲之圖檔下載下傳APP1.0直接上代碼分析代碼

今天給大家來個好玩一點的,運用python爬取圖檔到本地,網站為 https://www.pexels.com/ 這個網站為外文網,是以搜尋圖檔要用英語,今天要做的就是在python中進行搜尋和下載下傳圖檔,做一個網頁版的APP。

直接上代碼

from bs4 import BeautifulSoup
import requests

headers ={
    'accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    'Cookie':'__cfduid=dcb472bad94316522ad55151de6879acc1479632720; locale=en; _ga=GA1.2.1575445427.1479632759; _gat=1; _hjIncludedInSample=1',
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36'
}

url_path = 'https://www.pexels.com/search/'
content= input('請輸入你要下載下傳的圖檔:')
url = url_path + content + '/'
wb_data = requests.get(url,headers=headers)
soup = BeautifulSoup(wb_data.text,'lxml')
imgs = soup.select('a > img')
list = []
for img in imgs:
    photo = img.get('src')
    list.append(photo)

path = 'C://Users/Administrator/Desktop/photo/'

i = 1
for item in list:
    if item==None:
        pass
    elif '?' in item:
        data = requests.get(item,headers=headers)
        fp = open(path+content+str(i)+'.jpeg','wb')
        fp.write(data.content)
        fp.close
        i = i+1
    else:
        data = requests.get(item, headers=headers)
        fp = open(path+item[-10:],'wb')
        fp.write(data.content)
        fp.close()
           

分析代碼

1我首先網站上分别搜尋snow和girl,網站分别為:

https://www.pexels.com/search/snow/ https://www.pexels.com/search/girl/

是以我利用input函數進行輸入,然後自己建構url。

2解析和找到圖檔的url放到list中,這部分就不多講了。

3之前用urlretrieve來下載下傳一直報錯,可能是外文網的原因,是以我把取到的圖檔的url再request一次,并加上了headers。

4為什麼要用判斷了?因為這個網站我爬取出現了None,我把它pass掉,其它有jpeg格式的,有png格式的,是以要分别下載下傳。