python 循环 覆盖之前print内容_Python爬虫第二战---爬取500px图片
生活随笔
收集整理的這篇文章主要介紹了
python 循环 覆盖之前print内容_Python爬虫第二战---爬取500px图片
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
前言:
如今的高速網(wǎng)絡(luò)極大促進(jìn)了信息的展示方式,高清圖片,視頻等成就了我們的視聽盛宴。但是,我們獲取到的圖片或者視頻可能是被壓縮過(guò)的,所以總體上還是有點(diǎn)小瑕疵,今天呢,我給大家?guī)?lái)一篇使用Python爬取著名高清圖片網(wǎng)站500px圖片的文章,這個(gè)爬蟲具有搜索功能哦。讓你感受攝影魅力!
通過(guò)這篇文章的學(xué)習(xí),你將學(xué)會(huì):
- 使用requests庫(kù)發(fā)起請(qǐng)求
- 將requests請(qǐng)求結(jié)果轉(zhuǎn)化為json類型
- 提取json類型的數(shù)據(jù)
- 寫入圖像類型文件
Python環(huán)境搭建可以參考這里
順手牽羊:Python 環(huán)境搭建?zhuanlan.zhihu.com整體流程圖
實(shí)戰(zhàn):
2.導(dǎo)入 rrequests庫(kù)
import requests3. json數(shù)據(jù)類型介紹
json是一種數(shù)據(jù)存儲(chǔ)方式,它可以看做字典和列表的組合,列表可以是字典的值,字典可以是列表中的項(xiàng)目 一下例子可能會(huì)讓你更容易理解# json是一種數(shù)據(jù)存儲(chǔ)方式,類python的字典,例如下面json_example={"name":"Mike", "hoobby":["Ball","game"], "address":[{"city":"New York"},{"street":"Center Street"}] } # 上面的json_example就是一個(gè)簡(jiǎn)單的json數(shù)據(jù)的實(shí)例 # 可以看到,json類型文件就是字典和列表的組合,列表可以是字典的值,字典 # 下面是獲取指定數(shù)據(jù)的方法 name=json_example['name'] print(name) # 輸出: Mike # 請(qǐng)注意下面的 0,這個(gè)0代表 adrress 這個(gè) 鍵 對(duì)應(yīng)的值是一個(gè)列表 # 0代表列表的第一項(xiàng),而第一項(xiàng)的鍵 city 所對(duì)于的值是New York,所以這樣子可以獲得city city=json_example['address'][0]['city'] print(city) # 輸出 New York# 下面演示在不知道鍵名的情況下遍歷json數(shù)據(jù)中所有內(nèi)容 for i in json_example:print(i) # 輸出:hoobby address爬取圖片完整代碼
import requests # 接受搜索 key=input("請(qǐng)輸入關(guān)鍵詞:")pn=input("請(qǐng)輸入要爬取的頁(yè)數(shù):")# input獲取的輸入是字符串格式,而我們想要的頁(yè)數(shù)是整數(shù),所以使用 int() 函數(shù)進(jìn)行類型轉(zhuǎn)換 # pn代表爬取的圖片總頁(yè)數(shù) pn=int(pn)print('。。。。。。開始爬取。。。。。。')# 定義一個(gè)列表來(lái)存放圖片地址 image_list=[] # 利用循環(huán),依次訪問(wèn)不同頁(yè)碼 for i in range(1,pn+1):print("。。。。。。正在提取第{}頁(yè)。。。。。。".format(i))# 這個(gè)url是我通過(guò)瀏覽器開發(fā)者工具抓取的,對(duì)初學(xué)者來(lái)說(shuō)難度有點(diǎn)大,建議直接使用就行# 傳遞頁(yè)數(shù)和關(guān)鍵詞即可使用# 如果想知道怎么獲取,可以私信我,或者在評(píng)論區(qū)留言,我教你。url='https://api.500px.com/v1/photos/search?type=photos&term={}&image_size%5B%5D=1&image_size%5B%5D=2&image_size%5B%5D=32&image_size%5B%5D=31&image_size%5B%5D=33&image_size%5B%5D=34&image_size%5B%5D=35&image_size%5B%5D=36&image_size%5B%5D=2048&image_size%5B%5D=4&image_size%5B%5D=14&include_states=true&formats=jpeg%2Clytro&include_tags=true&exclude_nude=true&page={}&rpp=50'.format(key,i)# 通過(guò)requests庫(kù)獲的get方法訪問(wèn)圖片所在頁(yè)的地址# requests.get(url).json()表示將獲得的訪問(wèn)結(jié)果轉(zhuǎn)化為json類型image_json=requests.get(url).json()# print(requests.get(url).text)# 取消上面這句代碼的注釋,再仔細(xì)看看json實(shí)例介紹,你就知道下面為什么這么寫了data=image_json.get('photos')for i in data:image_url=i.get('images')[8].get('url')# 把圖片地址添加到之前列表中image_list.append(image_url) # 定義一個(gè)變量來(lái)計(jì)算下載成功的圖片個(gè)數(shù),并且以它命名圖片 count=0 for image in image_list:print("正在下載第{}張圖片!".format(count+1))image_content=requests.get(image).content# wb表示以二進(jìn)制的方式寫入文件,w表示覆蓋寫,即創(chuàng)建新文件,或者覆蓋之前同名的文件# b表示二進(jìn)制方式寫入,圖片,視頻等文件是二進(jìn)制文件# "{}.jpg".format(count) 表示文件名,count是變量,下載過(guò)程中,文件名為:1.jpg , 2.jpg ... with open("{}.jpg".format(count),"wb") as f:f.write(image_content)# 每成功下載一張圖片,count加1count=count+1print("成功下載第{}張圖片!".format(count))print("全部圖片下載完畢,圖片路徑與當(dāng)前文件相同!")爬取過(guò)程圖片:
爬取過(guò)程部分成果寫在最后:
希望大家通過(guò)本文掌握前文提到的幾個(gè)技能,有問(wèn)題歡迎在評(píng)論區(qū)留言或者私信我
總結(jié)
以上是生活随笔為你收集整理的python 循环 覆盖之前print内容_Python爬虫第二战---爬取500px图片的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 宝塔linux忘记密码,宝塔忘记登录入口
- 下一篇: jsp工程防止外部注入_防止 jsp被s