用python寫個(gè)校內(nèi)網(wǎng)照片下載器钧萍?

人人網(wǎng)照片下載器
chromedriver版本對(duì)應(yīng)表
chromedriver下載

前段時(shí)間春畔,朋友圈里不知道為什么忽然刮起了一股曬18歲照片的風(fēng)脱货,不能免俗的我,自然也翻箱倒柜到處找起來(lái)以前的照片律姨,由于我存有照片的移動(dòng)硬盤已經(jīng)損壞振峻,于是就想起了當(dāng)年非常火的一個(gè)社交類網(wǎng)站--人人網(wǎng)(校內(nèi)網(wǎng))择份。

說(shuō)來(lái)也巧扣孟,那天我登陸人人網(wǎng)找照片時(shí),網(wǎng)站也是奇慢無(wú)比荣赶,打開一張照片要花差不多兩分鐘凤价,在好不容易找到一張滿意的照片并發(fā)完朋友圈裝逼后鸽斟,不由得忽然擔(dān)心起來(lái)如果某天網(wǎng)站不在了,豈不是我所有的照片就沒了料仗,于是就打算用爬蟲把照片全存到電腦上湾盗。

分析了下人人網(wǎng)的網(wǎng)站,在輸入用戶名和密碼后立轧,利用requests庫(kù)的get方法格粪,手動(dòng)添加cookies和header后,就可以很容易的獲取所有照片的url氛改。相冊(cè)信息就在Request URL源代碼里的Album List里帐萎。

人人網(wǎng)cookies

其實(shí)如果就滿足于保存照片的話,到這里已經(jīng)沒啥好寫了胜卤,具體的抓取方法都差不多疆导,不論是利用scrapy框架還是簡(jiǎn)單的用requests庫(kù),都可以參照以前的代碼來(lái)寫葛躏。但是澈段,我又想把這個(gè)下載照片的代碼分享給好友使用,可總不能讓好友先看完《Python教程-廖雪峰》之后再來(lái)用吧舰攒,這可相當(dāng)?shù)牟挥押谩?strong>如何盡量用簡(jiǎn)單的語(yǔ)言教會(huì)用戶使用我寫的爬蟲代碼败富,就是我面臨的主要問題了。

最簡(jiǎn)單的方法就是將代碼打包成一個(gè)exe文件摩窃,這樣就只需要簡(jiǎn)單的雙擊就可以執(zhí)行了;但是關(guān)于網(wǎng)站登陸兽叮,目前還不太會(huì)處理,以往爬去需要登陸的網(wǎng)站都是先在網(wǎng)站上登陸后猾愿,再手動(dòng)復(fù)制cookies到代碼中來(lái)實(shí)現(xiàn)的鹦聪,這如果讓另一個(gè)沒有基礎(chǔ)的人來(lái)弄的話,可能就要麻煩很多了蒂秘。

百度了一番之后泽本,所幸在一篇知乎專欄里發(fā)現(xiàn)了一種比較偷懶的解決登陸的方法《Python模擬登陸萬(wàn)能法-微博|知乎》,簡(jiǎn)單來(lái)說(shuō)就是通過(guò)python的selenium庫(kù)來(lái)操作瀏覽器模擬手動(dòng)登陸網(wǎng)站的全過(guò)程姻僧,然后通過(guò)get_cookies()方法獲取登陸后的cookies观挎,然后再將cookies傳遞給requests庫(kù),從而實(shí)現(xiàn)后續(xù)的爬取段化。

selenium示意圖

selenium簡(jiǎn)介

  • selenium是一個(gè)Web應(yīng)用的自動(dòng)化測(cè)試工具,它可以模擬真實(shí)用戶對(duì)瀏覽器的操作造成,支持多種語(yǔ)言显熏,包括C、JAVA晒屎、Perl喘蟆、Ruby缓升、PHP以及Python等。
  • selenium支持驅(qū)動(dòng)多種瀏覽器蕴轨,包括ie港谊、chrome、火狐橙弱、safari歧寺、opera等。
  • Python中selenium通過(guò)find_element()的方法棘脐,對(duì)瀏覽器頁(yè)面中的元素進(jìn)行定位斜筐,其定位可以借助xpath、id蛀缝、name顷链、class、css selector等等方式實(shí)現(xiàn)屈梁,然后可以對(duì)定位的元素進(jìn)行文本抓取以及模擬鼠標(biāo)或鍵盤操作嗤练。selenium還可以通過(guò)其它方式,例如wait來(lái)保證對(duì)元素的操作可以正確進(jìn)行在讶。

Python目前可以通過(guò)pyinstaller庫(kù)來(lái)實(shí)現(xiàn)代碼打包成exe的功能煞抬,pyinstaller庫(kù)使用起來(lái)比較簡(jiǎn)單,具體方法如下真朗,除此以外我也未再多做研究此疹。

1.在cmd命令行中輸入pip install pyinstaller來(lái)安裝pyinstaller庫(kù)。
2.在python目錄的Scripts文件夾中找到安裝好的pyinstaller遮婶,用鼠標(biāo)將其拖入cmd中蝗碎,然后輸入-F,再將python代碼文件用鼠標(biāo)拖到后面旗扑,Enter確認(rèn)即可蹦骑。
3.若想更改圖標(biāo),在第二步中再額外輸入-i臀防,并將圖標(biāo)文件.ico拖到后面眠菇。

  • cmd命令行的輸入格式為:
    xxx\xxx\xxx\pyinstaller -F xxx\xxx\代碼文件.py -i xxx\xxx\xxx\圖標(biāo).ico

下面具體開始碼代碼。

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

#selenium操作瀏覽器需要下載相應(yīng)的驅(qū)動(dòng)袱衷。
#我用的是chrome瀏覽器捎废,因此需要下載相應(yīng)版本的chromedriver.exe。
chromepath = r"C:\chromedriver.exe"

#現(xiàn)在人人網(wǎng)的首頁(yè)有太多的圖片了致燥,為了加快載入速度添加一個(gè)瀏覽器設(shè)置登疗,設(shè)置為不加載圖片。
chrome_opt = webdriver.ChromeOptions()
prefs={"profile.managed_default_content_settings.images":2}
chrome_opt.add_experimental_option("prefs",prefs)
browser = webdriver.Chrome(chromepath,chrome_options=chrome_opt)
wait = WebDriverWait(browser,3)

#打開人人網(wǎng)主頁(yè)
browser.get('http://www.renren.com/')
#定位到用戶名輸入框,通過(guò)send_keys的方式辐益,輸入用戶名
login = wait.until(
    EC.presence_of_element_located((By.XPATH,"http://input[@name='email']"))
)
login.send_keys(login_account)
#定位到密碼輸入框断傲,通過(guò)send_keys的方式,輸入密碼
pwd = wait.until(
    EC.presence_of_element_located((By.XPATH,"http://input[@id='password']"))
)
pwd.send_keys(password)
#勾選保存密碼按鈕
browser.find_element_by_xpath("http://form[@id='loginForm']/dl[@class='savepassword clearfix']/dt/label[@class='labelCheckbox']/input[@id='autoLogin']").click()
#點(diǎn)擊確認(rèn)并登陸
browser.find_element_by_xpath("http://form[@id='loginForm']/dl[@class='bottom']/input[@id='login']").click()
#不可缺少智政!
cookie_dic = {}
while 'ln_uact' not in cookie_dic.keys():
    cookies = browser.get_cookies()
    print('登陸Cookies獲取中...')
    # 將selenium獲取的cookies格式轉(zhuǎn)換為requests所識(shí)別的格式
    for i in cookies:
        cookie_dic[i['name']] = i['value']
print('登陸Cookies獲取完畢认罩,準(zhǔn)備開始抓取相片...')

登陸人人網(wǎng)并獲取cookies的代碼就已經(jīng)完成了,各個(gè)部分的功能已在代碼里注釋了续捂,其中值得說(shuō)明的一點(diǎn)是最后關(guān)于cookies的部分垦垂。我用了while循環(huán)來(lái)判斷cookies是否正確獲取,之所以這么做是因?yàn)閺狞c(diǎn)擊登陸按鈕到頁(yè)面完全加載是需要一定的時(shí)間疾忍,若在頁(yè)面未完全加載的情況下獲取cookies乔外,會(huì)發(fā)現(xiàn)cookies中少了一些參數(shù),其中就包括了lu_act一罩,此時(shí)獲取的cookies則不能用于登陸杨幼。

  • 這里也可以簡(jiǎn)單的通過(guò)time.sleep()來(lái)設(shè)置一個(gè)等待時(shí)間,等待頁(yè)面加載完畢后來(lái)獲取cookies聂渊,但是這樣代碼就不夠健壯差购,可能受到網(wǎng)絡(luò)帶寬因素的影響。
  • 另外也可以通過(guò)selenium自帶的顯示等待WebDriverWait來(lái)實(shí)現(xiàn)汉嗽,通過(guò)監(jiān)視頁(yè)面上某個(gè)元素的狀態(tài)來(lái)判斷頁(yè)面是否完全加載欲逃。我沒有采取這種方法是因?yàn)閲L試著用了幾個(gè)元素作為判斷依據(jù)都失敗了。饼暑。

剩下的代碼則是簡(jiǎn)單的用requests庫(kù)進(jìn)行爬取稳析,方法還是對(duì)網(wǎng)頁(yè)元素以及url進(jìn)行分析,各個(gè)部分在爬蟲源代碼中都已經(jīng)有了詳細(xì)注釋弓叛,就不再展開細(xì)說(shuō)彰居。需要說(shuō)明的是,獲取相片信息和下載相片要用到兩個(gè)headers撰筷,因?yàn)槎叩膆ost信息不同陈惰。

#兩個(gè)headers,第一個(gè)headers帶有host值毕籽,用于獲取相片信息抬闯。
#第二個(gè)headers不能帶有前面的host值,用于下載相片关筒。
headers = {'Host':'photo.renren.com',
           'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
headers1 = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36'}

在完成所有的爬蟲代碼后溶握,打開cmd運(yùn)行pyinstaller將代碼打包為exe,大功告成蒸播。

最后來(lái)張運(yùn)行的效果圖睡榆。

以相冊(cè)名稱建立文件夾,分別儲(chǔ)存相冊(cè)里的照片,因?yàn)榫W(wǎng)絡(luò)原因下載失敗的照片肉微,會(huì)提示下載失敗并將url記錄在文件夾的txt文檔內(nèi)。

屏幕截圖(4).png

最后是源碼Python爬蟲代碼--人人網(wǎng)照片下載

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蜡塌,一起剝皮案震驚了整個(gè)濱河市碉纳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌馏艾,老刑警劉巖劳曹,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異琅摩,居然都是意外死亡铁孵,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門房资,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蜕劝,“玉大人,你說(shuō)我怎么就攤上這事轰异♂妫” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵搭独,是天一觀的道長(zhǎng)婴削。 經(jīng)常有香客問我,道長(zhǎng)牙肝,這世上最難降的妖魔是什么唉俗? 我笑而不...
    開封第一講書人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮配椭,結(jié)果婚禮上虫溜,老公的妹妹穿的比我還像新娘。我一直安慰自己颂郎,他們只是感情好吼渡,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著乓序,像睡著了一般寺酪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上替劈,一...
    開封第一講書人閱讀 52,255評(píng)論 1 308
  • 那天寄雀,我揣著相機(jī)與錄音,去河邊找鬼陨献。 笑死盒犹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播急膀,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼沮协,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了卓嫂?” 一聲冷哼從身側(cè)響起慷暂,我...
    開封第一講書人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎晨雳,沒想到半個(gè)月后行瑞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡餐禁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年血久,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片帮非。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡氧吐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出喜鼓,到底是詐尸還是另有隱情副砍,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布庄岖,位于F島的核電站豁翎,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏隅忿。R本人自食惡果不足惜心剥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望背桐。 院中可真熱鬧优烧,春花似錦、人聲如沸链峭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)弊仪。三九已至熙卡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間励饵,已是汗流浹背驳癌。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留役听,地道東北人颓鲜。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓表窘,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親甜滨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子乐严,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

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

  • 基于 SELENIUM 的自動(dòng)化測(cè)試架構(gòu) 非常感謝各位查閱本篇文章,筆者在此感謝各位衣摩。 目前市面上有分門別類的自動(dòng)...
    厲鉚兄閱讀 6,077評(píng)論 6 43
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    aimaile閱讀 26,502評(píng)論 6 427
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,283評(píng)論 25 707
  • 洞見SELENIUM自動(dòng)化測(cè)試 寫在最前面:目前自動(dòng)化測(cè)試并不屬于新鮮的事物麦备,或者說(shuō)自動(dòng)化測(cè)試的各種方法論已經(jīng)層出...
    厲鉚兄閱讀 6,732評(píng)論 3 47
  • 一場(chǎng)演出,滿堂歡樂昭娩。 辭舊迎新,春光燦爛黍匾。 由甘肅省民政廳主辦栏渺,蘭州市民政局承辦,蘭州廣播電視臺(tái)綜藝體育頻道锐涯、西部...
    宗林的李閱讀 659評(píng)論 0 0