python百行代碼實(shí)現(xiàn)漢服圈圖片爬取
平時(shí)旅游的時(shí)候,在旅游景區(qū)我們經(jīng)??梢钥吹酱└鞣N服飾去拍照的游客,也不會(huì)刻意多關(guān)注。前兩天瀏覽網(wǎng)頁(yè)無(wú)意看到一個(gè)網(wǎng)站,看到穿漢服的女孩是真的很好看。無(wú)論是工作需要還是創(chuàng)作文案,把這么漂亮的圖片來(lái)當(dāng)作素材都是一個(gè)很好的idea。有需要,我們就爬它,爬它,爬它!
話不多說(shuō),我們下面詳細(xì)介紹圖片爬取。
分析網(wǎng)站
網(wǎng)址如下:
https://www.aihanfu.com/zixun/tushang-1/
這是第一頁(yè)的網(wǎng)址,根據(jù)觀察,第二頁(yè)網(wǎng)址也就是上述網(wǎng)站序號(hào)1變成了2,依次類(lèi)推,就可以訪問(wèn)全部頁(yè)數(shù)。
根據(jù)圖示,我們需要獲得每個(gè)子網(wǎng)站的鏈接,也就是href中網(wǎng)址,然后進(jìn)入每個(gè)網(wǎng)址,尋找圖片網(wǎng)址,在下載就行了。
子鏈接獲取
為了獲取上圖中的數(shù)據(jù),我們可以用soup或者re或者xpath等方法都可以,本文中小編使用xpath來(lái)定位,編寫(xiě)定位函數(shù),獲得每個(gè)子網(wǎng)站鏈接,然后返回主函數(shù),這里使用了一個(gè)技巧,在for循環(huán)中,可以看看!
def get_menu(url, heades): """ 根據(jù)每一頁(yè)的網(wǎng)址 獲得每個(gè)鏈接對(duì)應(yīng)的子網(wǎng)址 params: url 網(wǎng)址 """ r = requests.get(url, headers=headers) if r.status_code == 200: r.encoding = r.apparent_encoding html = etree.HTML(r.text) html = etree.tostring(html) html = etree.fromstring(html) # 查找每個(gè)子網(wǎng)址對(duì)應(yīng)的鏈接, 然后返回 children_url = html.xpath('//div[@class="news_list"]//article/figure/a/@href') for _ in children_url: yield _
獲取標(biāo)題和圖片地址
為了盡量多的采集數(shù)據(jù),我們把標(biāo)簽和圖片地址采集一下,當(dāng)然如果其他項(xiàng)目需要采集發(fā)布者和時(shí)間,也是可以做到多的,本篇就不再展開(kāi)。
我們點(diǎn)開(kāi)一個(gè)網(wǎng)址鏈接,如上圖所示,可以發(fā)現(xiàn)標(biāo)題在head的節(jié)點(diǎn)里面,獲取標(biāo)題是為創(chuàng)建文件夾時(shí)使用。
代碼如下:
def get_page(url, headers): """ 根據(jù)子頁(yè)鏈接,獲得圖片地址,然后打包下載 params: url 子網(wǎng)址 """ r = requests.get(url, headers=headers) if r.status_code == 200: r.encoding = r.apparent_encoding html = etree.HTML(r.text) html = etree.tostring(html) html = etree.fromstring(html) # 獲得標(biāo)題 title = html.xpath(r'//*[@id="main_article"]/header/h1/text()') # 獲得圖片地址 img = html.xpath(r'//div[@class="arc_body"]//figure/img/@src') # title 預(yù)處理 title = ''.join(title) title = re.sub(r'【|】', '', title) print(title) save_img(title, img, headers)
保存圖片
在翻轉(zhuǎn)每一頁(yè)時(shí)我們都需要把子鏈接對(duì)應(yīng)的圖片保存下來(lái),此處需要注意對(duì)請(qǐng)求的狀態(tài)判斷、路徑判斷。
def save_img(title, img, headers): """ 根據(jù)標(biāo)題創(chuàng)建子文件夾 下載所有的img鏈接,選擇更改質(zhì)量大小 params:title : 標(biāo)題 params: img : 圖片地址 """ if not os.path.exists(title): os.mkdir(title) # 下載 for i, j in enumerate(img): # 遍歷該網(wǎng)址列表 r = requests.get(j, headers=headers) if r.status_code == 200: with open(title + '//' + str(i) + '.png', 'wb') as fw: fw.write(r.content) print(title, '中的第', str(i), '張下載完成!')
主函數(shù)
if __name__ == '__main__': """ 一頁(yè)一頁(yè)查找 params : None """ path = '/Users/********/漢服/' if not os.path.exists(path): os.mkdir(path) os.chdir(path) else: os.chdir(path) # url = 'http://www.aihanfu.com/zixun/tushang-1/' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)' ' AppleWebKit/537.36 (KHTML, like Gecko)' ' Chrome/81.0.4044.129 Safari/537.36'} for _ in range(1, 50): url = 'http://www.aihanfu.com/zixun/tushang-{}/'.format(_) for _ in get_menu(url, headers): get_page(_, headers) # 獲得一頁(yè)
至此我們已經(jīng)完成了所有環(huán)節(jié),關(guān)于爬蟲(chóng)的文章,小編已經(jīng)不止一次的介紹了,一方面是希望大家可以多多熟悉爬蟲(chóng)技巧,另外一方面小編認(rèn)為爬蟲(chóng)是數(shù)據(jù)分析、數(shù)據(jù)挖掘的基礎(chǔ)。沒(méi)有爬蟲(chóng)獲取數(shù)據(jù),何來(lái)數(shù)據(jù)分析。
以上就是python百行代碼實(shí)現(xiàn)漢服圈圖片爬取的詳細(xì)內(nèi)容,更多關(guān)于python爬取漢服圈圖片的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
6行Python代碼實(shí)現(xiàn)進(jìn)度條效果(Progress、tqdm、alive-progress
這篇文章主要介紹了6行Python代碼實(shí)現(xiàn)進(jìn)度條效果(Progress、tqdm、alive-progress和PySimpleGUI庫(kù)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01CoAtNet實(shí)戰(zhàn)之對(duì)植物幼苗圖像進(jìn)行分類(lèi)(pytorch)
谷歌的最新模型CoAtNet做了卷積 + Transformer的融合,在ImageNet-1K數(shù)據(jù)集上取得88.56%的成績(jī)。本文主要介紹如何用CoAtNet實(shí)現(xiàn)植物幼苗圖像的分類(lèi)。感興趣的小伙伴可以學(xué)習(xí)一下2021-12-12Python的PIL庫(kù)中g(shù)etpixel方法的使用
這篇文章主要介紹了Python的PIL庫(kù)中g(shù)etpixel方法的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04python threading和multiprocessing模塊基本用法實(shí)例分析
這篇文章主要介紹了python threading和multiprocessing模塊基本用法,結(jié)合實(shí)例形式詳細(xì)分析了Python中threading和multiprocessing模塊基本概念、功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-07-07python用fsolve、leastsq對(duì)非線性方程組求解
這篇文章主要為大家詳細(xì)介紹了python用fsolve、leastsq對(duì)非線性方程組進(jìn)行求解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12pytorch獲取模型某一層參數(shù)名及參數(shù)值方式
今天小編就為大家分享一篇pytorch獲取模型某一層參數(shù)名及參數(shù)值方式,具有很好的價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12python線程鎖(thread)學(xué)習(xí)示例
python thread提供了低級(jí)別的、原始的線程以及一個(gè)簡(jiǎn)單的鎖,下面提供一個(gè)python線程線程鎖(thread)學(xué)習(xí)示例,大家參考使用2013-12-12python實(shí)現(xiàn)簡(jiǎn)單加密解密機(jī)制
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡(jiǎn)單加密解密機(jī)制,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03