一個(gè)不錯(cuò)的圖片網(wǎng)站的圖片抓取--selenium 右鍵保存和直接寫(xiě)入2個(gè)模式【python】


title: stocksnap 一個(gè)不錯(cuò)的圖片網(wǎng)站的圖片抓取--selenium 右鍵保存和直接寫(xiě)入2個(gè)模式【python】
date: 2016-09-18 10:59:28
tags:


參考:原文1#

參考:原文2#

1、原文1采用了scrapy方法氛濒,本文改編用selenium方法,并參考原文2首次采用模擬右鍵來(lái)保存圖片浦译。

2上炎、網(wǎng)站分析:

首先發(fā)現(xiàn)鼠標(biāo)拖動(dòng)到圖片底部區(qū)域拴竹,主頁(yè)又不斷加載新的圖片扫俺,可判斷是異步的路鹰。另單獨(dú)查看2個(gè)圖的xpath惨篱,發(fā)現(xiàn)總體格式一致盏筐,編號(hào)部分有差異:

/html/body/div[4]/div[3]/div[2]/div/div[1]/a/img

/html/body/div[4]/div[3]/div[2]/div/div[11]/a/img

這樣我們就得到了在firefox下統(tǒng)一的xpath為,注意是刪除div[i]部分砸讳,留下2個(gè)斜杠:

/html/body/div[4]/div[3]/div[2]/div//a/img

此時(shí)琢融,可能覺(jué)得為啥要?jiǎng)h除,而不是用正則式.*代替簿寂?測(cè)試那樣的結(jié)果是Nan漾抬,也就是說(shuō)xpath的格式和re格式不能混搭。

而每個(gè)jpg地址在src屬性中常遂,所以如果想查閱批量的圖片地址纳令,則:

/html/body/div[4]/div[3]/div[2]/div//a/img/@src

3、既然這么爽的得到了圖片地址克胳,剩下就是批量下載保存了:

這一次平绩,先測(cè)試了用firefox模擬人工右鍵保存的方法,代碼如下漠另,保存那塊還沒(méi)整明白捏雌,也就是自動(dòng)到出現(xiàn)圖片保存的界面,根本原因是selenium無(wú)法操作操作系統(tǒng)級(jí)的對(duì)話框:

索性快速人工點(diǎn)保存,30個(gè)圖的保存位置都是重復(fù)的笆搓,依次得到30個(gè)圖:

4性湿、隨機(jī)打開(kāi)一個(gè)圖,如下满败,可見(jiàn)測(cè)試ok:


5肤频、代碼:

# -*- coding: utf-8 -*-
# python 3.5.2
# Author:vansnowpea
# stocksnap 一個(gè)不錯(cuò)的圖片網(wǎng)站的圖片,右鍵保存抓取

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys


print('Please wait...Firefox loading...')
print('---------------------------------')


url = "https://stocksnap.io/"

# 用瀏覽器實(shí)現(xiàn)訪問(wèn)
driver = webdriver.Firefox()
driver.maximize_window()
driver.get(url)

# 得到總的jpgs的路徑集合
xpath = "/html/body/div[4]/div[3]/div[2]/div//a/img"

# set profile
fp = webdriver.FirefoxProfile()
fp.set_preference('browser.download.folderList', 2)
fp.set_preference('browser.download.manager.showWhenStarting', False)
fp.set_preference('browser.download.dir', './yourfolder/')
fp.set_preference('browser.helperApps.neverAsk.saveToDisk', 'image/jpeg')



# 保存圖片,人工批量點(diǎn)保存算墨,selenium無(wú)法操作操作系統(tǒng)級(jí)的對(duì)話框
for element in driver.find_elements_by_xpath(xpath):
    img_url = element.get_attribute('src')
    img_desc = element.get_attribute('data-desc')

    action = ActionChains(driver).move_to_element(element)
    action.context_click(element)
    action.send_keys(Keys.ARROW_DOWN)
    action.send_keys('v')
    action.perform()

print('Well done! all pictures downloaded.')
print('---------------------------------')

# driver.close()

6着裹、如果圖片數(shù)量少,人工保存下也無(wú)妨米同,但數(shù)量大肯定不行骇扇,所以還是用常規(guī)的自動(dòng)寫(xiě)入數(shù)據(jù)保存的方式。另外此網(wǎng)站是通過(guò)ajax異步加載面粮,當(dāng)鼠標(biāo)放到首頁(yè)30個(gè)圖的下方少孝,也就是瀏覽器底部區(qū)域,他又會(huì)自動(dòng)加載新的圖片出來(lái)熬苍。而通過(guò)新的第一層代碼的模擬鼠標(biāo)下移稍走,可以得到更多的圖片袁翁。千萬(wàn)要注意的是,在python 3中婿脸,對(duì)數(shù)dict的關(guān)鍵詞查找是in粱胜,比如:if n in previous:而在python 2 中是has_key,比如:if previous.has_key(n):對(duì)應(yīng)代碼為:

# python 3.5.2
from selenium import webdriver  
import time  
import urllib


# 爬取頁(yè)面地址  
url = "https://stocksnap.io/"

# 目標(biāo)元素的xpath  
xpath = "/html/body/div[4]/div[3]/div[2]/div//a/img"
  
# 啟動(dòng)Firefox瀏覽器  
driver = webdriver.Firefox()  
  
# 最大化窗口,因?yàn)槊恳淮闻廊≈荒芸吹揭暣皟?nèi)的圖片  
driver.maximize_window()  
  
# 記錄下載過(guò)的圖片地址狐树,避免重復(fù)下載  
img_url_dic = {}  
  
# 瀏覽器打開(kāi)爬取頁(yè)面  
driver.get(url)  
  
# 模擬滾動(dòng)窗口以瀏覽下載更多圖片  
pos = 0  
m = 0 # 圖片編號(hào)  
for i in range(10):  
    pos += i*500 # 每次下滾500  
    js = "document.documentElement.scrollTop=%d" % pos  
    driver.execute_script(js)  
    time.sleep(1)     
      
    for element in driver.find_elements_by_xpath(xpath):  
        img_url = element.get_attribute('src')  
        # 保存圖片到指定路徑  
        if img_url != None and not img_url in img_url_dic:

            img_url_dic[img_url] = ''  
            m += 1  
            ext = img_url.split('.')[-1]  
            filename = str(m) + '.' + ext  
            #保存圖片數(shù)據(jù)  
            data = urllib.request.urlopen(img_url).read()
            f = open('./van/' + filename, 'wb')
            f.write(data)  
            f.close()  
driver.close()  

7焙压、結(jié)果展示:相對(duì)第一個(gè)方法,獲取了更多的圖片:


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末抑钟,一起剝皮案震驚了整個(gè)濱河市涯曲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌在塔,老刑警劉巖幻件,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蛔溃,居然都是意外死亡绰沥,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門贺待,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)徽曲,“玉大人,你說(shuō)我怎么就攤上這事狠持。” “怎么了瞻润?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵喘垂,是天一觀的道長(zhǎng)俱恶。 經(jīng)常有香客問(wèn)我涧郊,道長(zhǎng)翅雏,這世上最難降的妖魔是什么像樊? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任捶箱,我火速辦了婚禮缔逛,結(jié)果婚禮上页响,老公的妹妹穿的比我還像新娘闺魏。我一直安慰自己非洲,他們只是感情好鸭限,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著两踏,像睡著了一般败京。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上梦染,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天赡麦,我揣著相機(jī)與錄音朴皆,去河邊找鬼。 笑死泛粹,一個(gè)胖子當(dāng)著我的面吹牛遂铡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播晶姊,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼扒接,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了帽借?” 一聲冷哼從身側(cè)響起珠增,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎砍艾,沒(méi)想到半個(gè)月后蒂教,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡脆荷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年凝垛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜓谋。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡梦皮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出桃焕,到底是詐尸還是另有隱情剑肯,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布观堂,位于F島的核電站让网,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏师痕。R本人自食惡果不足惜溃睹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望胰坟。 院中可真熱鬧因篇,春花似錦、人聲如沸笔横。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)吹缔。三九已至虽界,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間涛菠,已是汗流浹背莉御。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工撇吞, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人礁叔。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓牍颈,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親琅关。 傳聞我的和親對(duì)象是個(gè)殘疾皇子煮岁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • WebDriver 進(jìn)階 歡迎閱讀WebDriver進(jìn)階講義。本篇講義將會(huì)重點(diǎn)介紹Selenium WebDriv...
    厲鉚兄閱讀 5,778評(píng)論 3 27
  • 喜歡那些花兒 卻沒(méi)有辦法 使它不凋謝 喜歡成群的鳥(niǎo)兒 卻沒(méi)有能力 使它留在原地 喜歡自由灑脫 卻沒(méi)有一種力量 有沖...
    向北y閱讀 253評(píng)論 0 0
  • 繁花添錦:什么是成功?這是一個(gè)抽象的問(wèn)題 夜幕里掛著一輪殘?jiān)滦轮ⅲ高^(guò)窗戶吹進(jìn)來(lái)一股涼颼颼的風(fēng)步氏,談不上刺骨卻也讓我打了...
    繁花添錦閱讀 161評(píng)論 0 0
  • 我的母親是個(gè)極寬厚仁慈的人。 我上小學(xué)的時(shí)候徒爹,學(xué)校后坡下有條小河荚醒,河水清澈見(jiàn)底,河邊有一大片斜伸入水中的石板...
    Cq0816閱讀 347評(píng)論 6 3