《爬蟲》爬取谷歌網頁“人臉”圖片
阿新 • • 發佈:2020-12-29
技術標籤:python爬蟲pythonseleniumchrome
爬取谷歌網頁搜尋的關於“人臉”的圖片
目標:谷歌搜尋“人臉” 網頁搜尋出現的圖片
selenium:模擬瀏覽器的工具。(還需要下載ChromeDriver 放到python的scripts安裝目錄中)
每次下滑500 單位,然後將當前視窗的所有圖片的url抓取出來,使用selenium將tag_name為img的抓取出來即可。(另外也可以使用html,用BeautifulSoup解析網頁,得到img的url)
有些圖片會抓取不了,因為他們對應的url並不是圖片,所以需要把這些url去掉;另外還有地址特別長的,無法下載圖片,可以計算字串的長度將其過濾;注意到所有圖片的url中都有images字串,判斷url有沒有images,將有的儲存下來。
from selenium import webdriver
import time
import os
import requests
import random
#修改keyword便可以修改搜尋關鍵詞
keyword = input()
url = 'https://www.google.com.hk/search?q='+keyword+'&tbm=isch'
class Crawler_google_img:
# 初始化
def __init__(self):
self.url = url
# 獲得Chrome驅動,並訪問url
def init_browser(self):
chrome_options = webdriver.ChromeOptions() #配置chrome啟動
chrome_options.add_argument("--disable-infobars") # 新增啟動引數
chrome_options.add_argument("user-agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36'" )
browser = webdriver.Chrome(chrome_options=chrome_options)
# chromeOptions 是一個配置 chrome 啟動 是屬性的類。通過這個類,我們可以為chrome配置如下引數(這個部分可以通過selenium原始碼看到):
# 設定 chrome 二進位制檔案位置 (binary_location)
# 新增啟動引數 (add_argument)
# 新增擴充套件應用 (add_extension, add_encoded_extension)
# 新增實驗性質的設定引數 (add_experimental_option)
# 設定偵錯程式地址 (debugger_address)
# 訪問url
browser.get(self.url)
# 最大化視窗,之後需要爬取視窗中所見的所有圖片
browser.maximize_window()
return browser
#下載圖片
def download_images(self, browser,round=10):
picpath = 'G:/爬蟲內容/爬取圖片/images'
# 路徑不存在時建立一個
if not os.path.exists(picpath):
os.makedirs(picpath)
# 記錄下載過的圖片地址,避免重複下載
img_url_dic = []
count = 0 #圖片序號
pos = 0
for i in range(round):
pos += 500
# 向下滑動
js = 'var q=document.documentElement.scrollTop=' + str(pos)
browser.execute_script(js)
time.sleep(1)
# 找到圖片
# html = browser.page_source#也可以抓取當前頁面的html文字,然後用beautifulsoup來抓取
#直接通過tag_name來抓取是最簡單的,比較方便
img_elements = browser.find_elements_by_tag_name('img')
#遍歷抓到的webElement
for img_element in img_elements:
img_url = img_element.get_attribute('src')
# 前幾個圖片的url太長,不是圖片的url,先過濾掉,爬後面的
if isinstance(img_url, str):
if len(img_url) <= 200:
#將干擾的goole圖示篩去
if 'images' in img_url:
#判斷是否已經爬過,因為每次爬取當前視窗,或許會重複
if img_url not in img_url_dic:
try:
img_url_dic.append(img_url)
#下載並儲存圖片到當前目錄下
filename = "G:/爬蟲內容/爬取圖片/images/" + str(count) + ".jpg"
r = requests.get(img_url)
with open(filename, 'wb') as f:
f.write(r.content)
f.close()
count += 1
print('this is '+str(count)+'st img')
#防止反爬機制
time.sleep(0.2)
except:
print('failure')
def run(self):
self.__init__()
browser = self.init_browser()
self.download_images(browser,round = 20)#可以修改爬取的頁面數,基本10頁是100多張圖片
browser.close()
print("爬取完成")
執行
if __name__ == '__main__':
craw = Crawler_google_img()
craw.run()
對下載好的圖片進行判斷 是否包含人臉 見之前的文章
轉載:https://blog.csdn.net/qq_34687559/article/details/106340929