python百行代碼實現(xiàn)漢服圈圖片爬取
平時旅游的時候,在旅游景區(qū)我們經(jīng)??梢钥吹酱└鞣N服飾去拍照的游客,也不會刻意多關(guān)注。前兩天瀏覽網(wǎng)頁無意看到一個網(wǎng)站,看到穿漢服的女孩是真的很好看。無論是工作需要還是創(chuàng)作文案,把這么漂亮的圖片來當(dāng)作素材都是一個很好的idea。有需要,我們就爬它,爬它,爬它!
話不多說,我們下面詳細(xì)介紹圖片爬取。
分析網(wǎng)站
網(wǎng)址如下:
https://www.aihanfu.com/zixun/tushang-1/
這是第一頁的網(wǎng)址,根據(jù)觀察,第二頁網(wǎng)址也就是上述網(wǎng)站序號1變成了2,依次類推,就可以訪問全部頁數(shù)。

根據(jù)圖示,我們需要獲得每個子網(wǎng)站的鏈接,也就是href中網(wǎng)址,然后進(jìn)入每個網(wǎng)址,尋找圖片網(wǎng)址,在下載就行了。
子鏈接獲取
為了獲取上圖中的數(shù)據(jù),我們可以用soup或者re或者xpath等方法都可以,本文中小編使用xpath來定位,編寫定位函數(shù),獲得每個子網(wǎng)站鏈接,然后返回主函數(shù),這里使用了一個技巧,在for循環(huán)中,可以看看!
def get_menu(url, heades):
"""
根據(jù)每一頁的網(wǎng)址
獲得每個鏈接對應(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)
# 查找每個子網(wǎng)址對應(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)然如果其他項目需要采集發(fā)布者和時間,也是可以做到多的,本篇就不再展開。

我們點開一個網(wǎng)址鏈接,如上圖所示,可以發(fā)現(xiàn)標(biāo)題在head的節(jié)點里面,獲取標(biāo)題是為創(chuàng)建文件夾時使用。
代碼如下:
def get_page(url, headers):
"""
根據(jù)子頁鏈接,獲得圖片地址,然后打包下載
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ī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__':
"""
一頁一頁查找
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) # 獲得一頁
至此我們已經(jīng)完成了所有環(huán)節(jié),關(guān)于爬蟲的文章,小編已經(jīng)不止一次的介紹了,一方面是希望大家可以多多熟悉爬蟲技巧,另外一方面小編認(rèn)為爬蟲是數(shù)據(jù)分析、數(shù)據(jù)挖掘的基礎(chǔ)。沒有爬蟲獲取數(shù)據(jù),何來數(shù)據(jù)分析。
以上就是python百行代碼實現(xiàn)漢服圈圖片爬取的詳細(xì)內(nèi)容,更多關(guān)于python爬取漢服圈圖片的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python?BeautifulSoup4實現(xiàn)數(shù)據(jù)解析與提取
Beautiful?Soup是一個Python的庫,用于解析HTML和XML文檔,提供了方便的數(shù)據(jù)提取和操作功能,下面小編就來和大家詳細(xì)聊聊如何利用BeautifulSoup4實現(xiàn)數(shù)據(jù)解析與提取吧2023-10-10
Flask與數(shù)據(jù)庫的交互插件Flask-Sqlalchemy的使用
在構(gòu)建Web應(yīng)用時,與數(shù)據(jù)庫的交互是必不可少的部分,本文主要介紹了Flask與數(shù)據(jù)庫的交互插件Flask-Sqlalchemy的使用,具有一定的參考價值,感興趣的可以了解一下2024-03-03
詳解Python map函數(shù)及Python map()函數(shù)的用法
map() 會根據(jù)提供的函數(shù)對指定序列做映射。下面通過本文給大家介紹Python map函數(shù)及Python map()函數(shù)的用法,需要的朋友參考下吧2017-11-11

