1. 程式人生 > 其它 >《爬蟲》爬取谷歌網頁“人臉”圖片

《爬蟲》爬取谷歌網頁“人臉”圖片

技術標籤: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'

![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201228211240142.pn

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