亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python批量下載網(wǎng)站馬拉松照片的完整步驟

 更新時(shí)間:2018年12月05日 10:00:42   作者:蘇玉波  
這篇文章主要給大家介紹了關(guān)于利用python批量下載網(wǎng)站馬拉松照片的完整步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

目前學(xué)習(xí)python幾個(gè)月了,由于自己比較喜歡跑馬拉松,已經(jīng)跑過(guò)了很多場(chǎng)比賽,前些天就寫(xiě)了個(gè)簡(jiǎn)單的爬蟲(chóng)爬取了網(wǎng)上三千多場(chǎng)馬拉松比賽的報(bào)名信息。

今年5月27日,我又參加了巴圖魯關(guān)門(mén)山壹佰越野50公里組的比賽,這里的“巴圖魯”源自蒙古語(yǔ)“英雄”的意思,這場(chǎng)比賽也是出了名的虐,地點(diǎn)在遼寧省本溪市 · 關(guān)門(mén)山國(guó)家森林公園,累計(jì)爬升3655m。當(dāng)天早上六點(diǎn)準(zhǔn)時(shí)出發(fā),剛跑沒(méi)多久就來(lái)了很長(zhǎng)一段陡峭的臺(tái)階……此處省略一萬(wàn)字……最終經(jīng)過(guò)很多小時(shí)的艱苦奮戰(zhàn)完成了比賽。

賽后去官網(wǎng)想找?guī)讖埡每吹膱D片發(fā)朋友圈,打開(kāi)官網(wǎng)賽事圖片鏈接到了愛(ài)運(yùn)動(dòng)的一個(gè)網(wǎng)頁(yè)http://runnerbar.com/yd_runnerbar/album/pc?type=3&activity_id=10712,這是個(gè)單頁(yè)面的網(wǎng)頁(yè),不斷滾動(dòng)會(huì)自動(dòng)加載更多的圖片,我把頁(yè)面一點(diǎn)點(diǎn)滾動(dòng)找了很長(zhǎng)一段時(shí)間根本找不到我的照片,刷新一下頁(yè)面照片又從頭開(kāi)始了,實(shí)在不能忍。于是,我想要不把圖片全部下載到本地查看吧,想干就干。

1. 分析

1.1 Chrome調(diào)試

在chrome瀏覽器里輸入快捷鍵Cmd + Opt + I(Windows上是F12,或Ctrl + Shift + I),將調(diào)試選項(xiàng)切到Network,如下


一個(gè)個(gè)觀察此網(wǎng)頁(yè)發(fā)送的請(qǐng)求,找到和圖片相關(guān)的請(qǐng)求

這是一個(gè)get請(qǐng)求,初步分析里面的參數(shù),activity_id代表賽事id,page和pageSize分別代表頁(yè)數(shù)和每頁(yè)大小,接著將請(qǐng)求放在postman上印證

1.2請(qǐng)求分析

在postman里加了三個(gè)參數(shù)成功返回了一個(gè)json格式的值,第一階段很順利,接著分析里面的返回值,下面取了其中的一個(gè)元素

{
"album": {
 "activity_photo_count": 6984,
 "searchResultList": [
 {
  "id": "32926651",
  "uid": 50392,
  "name": "巴圖魯關(guān)東越野",
  "user_name": null,
  "user_img": "http://oss.runnerbar.com/img/user_upload/origin/20180526/1527305285356_fb59065d_18ce_478b_a3aa_259783f4cd5b.jpg",
  "create_time": 1527313780000,
  "image_height": 3648,
  "image_width": 5472,
  "orientation": 1,
  "url_hq": "http://oss.runnerbar.com/img/watermark/user_upload/origin/20180526/1527313783392_235c5cea_5d0c_4cd7_afc6_0ba37cdc7c1d.jpg?quality=h",
  "url_lq": "http://oss.runnerbar.com/img/watermark/user_upload/origin/20180526/1527313783867_7d986351_fde4_418a_8fb3_1723dcb38aec.jpg",
  "content": null,
  "is_like": 0,
  "like_count": null,
  "comment_count": 0
 }}

這是個(gè)json格式,最外層里有個(gè)album元素,album里包含了圖片總數(shù)量activity_photo_count和圖片信息的數(shù)組searchResultList。每張圖片包含了id、uid、user_img、create_time等等,和圖片路徑相關(guān)的有三個(gè)值分別是user_img、url_hq、url_lq,其中的user_img打開(kāi)后發(fā)現(xiàn)是賽事的宣傳logo,剩下的url_hq、url_lq根據(jù)命名就很容易猜想到這是對(duì)應(yīng)的兩種尺寸的圖片,用瀏覽器分別打開(kāi),果不其然正是想要的圖片路徑。

2.代碼

2.1

上面已經(jīng)知道了請(qǐng)求url和參數(shù),下面就是需要將這些用代碼實(shí)現(xiàn)出來(lái)。首先是發(fā)請(qǐng)求

url='http://m.yundong.runnerbar.com/yd_mobile/share/album.json'
para = {'activity_id':id,'page':page,'pageSize':100}
header = {}
r = requests.post(url,data=para,headers= header)

請(qǐng)求的返回值是json,json內(nèi)容在上面已經(jīng)貼出來(lái)了這里就不再重復(fù),接著解析這個(gè)json

json_r = r.json()
parsed_json = json_r['album']['searchResultList']
activity = {}
items = []
count = json_r['album']['activity_photo_count']

這里就取到了圖片總數(shù)量和圖片信息的數(shù)組,這個(gè)請(qǐng)求參數(shù)是page和pageSize,一個(gè)請(qǐng)求只能取到一部分圖片信息并不能把所有的圖片都取出來(lái)。那能不能把所有圖片分成一頁(yè)返回呢?于是在postman上做了實(shí)驗(yàn),將page=1,pageSize=10000發(fā)送,結(jié)果并不是想要的,真正返回的圖片數(shù)量是100。說(shuō)明這個(gè)接口做了校驗(yàn),每個(gè)分頁(yè)最大數(shù)量是100??磥?lái)投機(jī)取巧是不行了,分頁(yè)還是要做的。

首先將單個(gè)請(qǐng)求封裝成方法,傳入page返回對(duì)應(yīng)page的圖片信息數(shù)組

def getRaceInfo(id,page):
 url='http://m.yundong.runnerbar.com/yd_mobile/share/album.json'
 para = {'activity_id':id,'page':page,'pageSize':100}
 header = {}
 r = requests.post(url,data=para,headers= header)
 json_r = r.json()
 parsed_json = json_r['album']['searchResultList']
 activity = {}
 items = []
 count = json_r['album']['activity_photo_count']
 for item in parsed_json:
 # print(item['user_img'])
 items.append(item)
 activity['items'] = items
 activity['count'] = count
return activity

圖片的做數(shù)量是count,每頁(yè)分100張圖片,起點(diǎn)是第1頁(yè),那么總的分頁(yè)數(shù)量就是count/100+2,分頁(yè)的代碼就應(yīng)該是這樣的

for i in range(1,int(count/100+2)):
 data = getRaceInfo(id,i)['items']

這里只是貼了一小段代碼,完整代碼可以參見(jiàn)上面的github地址

2.2 下載

有了圖片在url,下載圖片就更簡(jiǎn)單了,直接上代碼

def save_img(img_url,file_name,file_path='book'):
#保存圖片到磁盤(pán)文件夾 file_path中,默認(rèn)為當(dāng)前腳本運(yùn)行目錄下的 book\img文件夾
try:
 if not os.path.exists(file_path):
 print('文件夾',file_path,'不存在,重新建立')
 #os.mkdir(file_path)
 os.makedirs(file_path)
 #獲得圖片后綴
 file_suffix = os.path.splitext(img_url)[1]
 #拼接圖片名(包含路徑)
 filename = '{}{}{}{}'.format(file_path,os.sep,file_name,file_suffix)
 #下載圖片,并保存到文件夾中
 urllib.request.urlretrieve(img_url,filename=filename)
except IOError as e:
 print('文件操作失敗',e)
except HTTPError as e:
 print('Error code: ', e.code)
except Exception as e:
 print('錯(cuò)誤 :',e)

運(yùn)行python,查看本地文件

幾千張圖片很快下載到了本地


這時(shí)又有了新的想法,既然可以下載關(guān)門(mén)山越野的圖片,是不是可以把愛(ài)運(yùn)動(dòng)里所有的圖片都下載下來(lái),說(shuō)干就干。于是我將賽事id定義成參數(shù),寫(xiě)個(gè)方法遍歷id。改動(dòng)了幾行從新運(yùn)行,幾個(gè)小時(shí)后程序還在運(yùn)行但是圖片占用的大小已經(jīng)超過(guò)了7G,


打開(kāi)文件里面包含了各個(gè)賽事的圖片,眼看圖片越來(lái)越多加上我的mac存儲(chǔ)空間有限最終停止了下載,但是這個(gè)思路應(yīng)該是可行的。

源碼地址: https://github.com/halibobo/runnerbar-image (本地下載

最后

整個(gè)過(guò)程從開(kāi)始到結(jié)束都在一天內(nèi)完成的,代碼里也沒(méi)有什么復(fù)雜的邏輯,但完成之后心里還是有很多的滿足感。

好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Python的歷史與優(yōu)缺點(diǎn)整理

    Python的歷史與優(yōu)缺點(diǎn)整理

    在本篇文章里小編給大家分享的是關(guān)于Python優(yōu)缺點(diǎn)及基礎(chǔ)知識(shí)點(diǎn)整理內(nèi)容,有需要的朋友們可以參考下。
    2020-05-05
  • Python readline()和readlines()函數(shù)實(shí)現(xiàn)按行讀取文件

    Python readline()和readlines()函數(shù)實(shí)現(xiàn)按行讀取文件

    本文主要介紹了Python readline()和readlines()函數(shù)實(shí)現(xiàn)按行讀取文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python制作七夕比心表白代碼詳解

    Python制作七夕比心表白代碼詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于Python制作七夕比心表白代碼詳解內(nèi)容,有需要的朋友們可以學(xué)習(xí)參考下。
    2021-08-08
  • Matlab中關(guān)于argmax、argmin函數(shù)的使用解讀

    Matlab中關(guān)于argmax、argmin函數(shù)的使用解讀

    這篇文章主要介紹了Matlab中關(guān)于argmax、argmin函數(shù)的使用解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Python多進(jìn)程機(jī)制實(shí)例詳解

    Python多進(jìn)程機(jī)制實(shí)例詳解

    這篇文章主要介紹了Python多進(jìn)程機(jī)制,以實(shí)例形式詳細(xì)分析了Python多進(jìn)程機(jī)制的原理與實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-07-07
  • 使用tensorflow實(shí)現(xiàn)VGG網(wǎng)絡(luò),訓(xùn)練mnist數(shù)據(jù)集方式

    使用tensorflow實(shí)現(xiàn)VGG網(wǎng)絡(luò),訓(xùn)練mnist數(shù)據(jù)集方式

    這篇文章主要介紹了使用tensorflow實(shí)現(xiàn)VGG網(wǎng)絡(luò),訓(xùn)練mnist數(shù)據(jù)集方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • 利用python實(shí)現(xiàn)全屏愛(ài)心雨向喜歡的人表白

    利用python實(shí)現(xiàn)全屏愛(ài)心雨向喜歡的人表白

    馬上520了,教大家用Python做一個(gè)下愛(ài)心雨的特效,這篇文章主要給大家介紹了關(guān)于利用python實(shí)現(xiàn)全屏愛(ài)心雨向喜歡的人表白的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • Python基于回溯法子集樹(shù)模板實(shí)現(xiàn)圖的遍歷功能示例

    Python基于回溯法子集樹(shù)模板實(shí)現(xiàn)圖的遍歷功能示例

    這篇文章主要介紹了Python基于回溯法子集樹(shù)模板實(shí)現(xiàn)圖的遍歷功能,結(jié)合實(shí)例形式分析了Python使用回溯法子集樹(shù)模板針對(duì)圖形遍歷問(wèn)題的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2017-09-09
  • CentOS7上使用pyenv搭建Django環(huán)境

    CentOS7上使用pyenv搭建Django環(huán)境

    本文主要介紹了CentOS7上使用pyenv搭建Django環(huán)境,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • python 字典套字典或列表的示例

    python 字典套字典或列表的示例

    今天小編就為大家分享一篇python 字典套字典或列表的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12

最新評(píng)論