用爬虫在网站上无限制的批量爬取图片
生活随笔
收集整理的這篇文章主要介紹了
用爬虫在网站上无限制的批量爬取图片
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
當我們需要在網站上大量下載某種圖片類型的時候,使用手動點擊圖片進行保存的形式既費時又費力,選擇用爬蟲來獲取海量圖片會極大的方便我們獲取圖片數據這一過程。
一.選擇有反爬蟲機制的網站進行爬取
我們最常見的圖片下載地址就是百度圖片了,但是百度擁有反爬蟲機制,網上很多爬蟲程序在一頁上只能爬取30張圖片,而且百度頁面沒有分頁,網址沒有頁數可以讓我們改,還好代碼里面留了翻頁流的網址,所以,現在來分享給大家。
import re import requests from urllib import error from bs4 import BeautifulSoup import os num = 0 numPicture = 0 file = '' List = [] def Find(url):global Listprint('正在檢測圖片總數,請稍等.....')t = 0i = 1s = 0while t < 2000:Url = url + str(t)try:Result = requests.get(Url, timeout=7)except BaseException:t = t + 60continueelse:result = Result.textpic_url = re.findall('"objURL":"(.*?)",', result, re.S) # 先利用正則表達式找到圖片urls += len(pic_url)if len(pic_url) == 0:breakelse:List.append(pic_url)t = t + 60return s def recommend(url):Re = []try:html = requests.get(url)except error.HTTPError as e:returnelse:html.encoding = 'utf-8'bsObj = BeautifulSoup(html.text, 'html.parser')div = bsObj.find('div', id='topRS')if div is not None:listA = div.findAll('a')for i in listA:if i is not None:Re.append(i.get_text())return Re def dowmloadPicture(html, keyword):global num# t =0pic_url = re.findall('"objURL":"(.*?)",', html, re.S) # 先利用正則表達式找到圖片urlprint('找到關鍵詞:' + keyword + '的圖片,即將開始下載圖片...')for each in pic_url:print('正在下載第' + str(num + 1) + '張圖片,圖片地址:' + str(each))try:if each is not None:pic = requests.get(each, timeout=7)else:continueexcept BaseException:print('錯誤,當前圖片無法下載')continueelse:string = file + r'\\' + keyword + '_' + str(num) + '.jpg'fp = open(string, 'wb')fp.write(pic.content)fp.close()num += 1if num >= numPicture:return if __name__ == '__main__': # 主函數入口word = input("請輸入搜索關鍵詞(可以是人名,地名等): ")url = 'http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=' + word + '&pn='#翻頁流的網址tot = Find(url)Recommend = recommend(url) # 記錄相關推薦print('經過檢測%s類圖片共有%d張' % (word, tot))numPicture = int(input('請輸入想要下載的圖片數量 '))file = input('請建立一個存儲圖片的文件夾,輸入文件夾名稱即可')y = os.path.exists(file)if y == 1:print('該文件已存在,請重新輸入')file = input('請建立一個存儲圖片的文件夾,輸入文件夾名稱即可')os.mkdir(file)else:os.mkdir(file)t = 0tmp = urlwhile t < numPicture:try:url = tmp + str(t)result = requests.get(url, timeout=10)print(url)except error.HTTPError as e:print('網絡錯誤,請調整網絡后重試')t = t + 60else:dowmloadPicture(result.text, word)t = t + 60print('當前搜索結束,感謝使用')print('猜你喜歡')for re in Recommend:print(re, end=' ')整個運行臺的顯示如下(關鍵詞,下載數量,存儲文件夾由我們自己在運行臺中輸入設置):
選擇批量爬取關鍵詞為“王凱”的圖片,選取了其中的兩張來展示。
二.選擇無反爬蟲機制的網站進行爬取
除了百度圖片以外,還可以從其它的網站上進行圖片爬取,比如:美桌,該網站并沒有robots協議,因此可以任意爬取。
我們可以對爬取的內容進行任意更改,比如說從美桌上爬取名為“靳東”的圖片。爬取過程中用到的第三方庫主要是requests和pypinyin(將漢字轉換成拼音),代碼如下
附上三張圖片
還是蠻帥氣的,哈哈
總結
以上是生活随笔為你收集整理的用爬虫在网站上无限制的批量爬取图片的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android将毫秒转换成日期,如何在A
- 下一篇: java回顾:MyBatis开发、配置、