python百行代碼實現漢服圈圖片爬取
平時旅遊的時候,在旅遊景區我們經常可以看到穿各種服飾去拍照的遊客,也不會刻意多關註。前兩天瀏覽網頁無意看到一個網站,看到穿漢服的女孩是真的很好看。無論是工作需要還是創作文案,把這麼漂亮的圖片來當作素材都是一個很好的idea。有需要,我們就爬它,爬它,爬它!
話不多說,我們下面詳細介紹圖片爬取。
分析網站
網址如下:
https://www.aihanfu.com/zixun/tushang-1/
這是第一頁的網址,根據觀察,第二頁網址也就是上述網站序號1變成瞭2,依次類推,就可以訪問全部頁數。
根據圖示,我們需要獲得每個子網站的鏈接,也就是href中網址,然後進入每個網址,尋找圖片網址,在下載就行瞭。
子鏈接獲取
為瞭獲取上圖中的數據,我們可以用soup或者re或者xpath等方法都可以,本文中小編使用xpath來定位,編寫定位函數,獲得每個子網站鏈接,然後返回主函數,這裡使用瞭一個技巧,在for循環中,可以看看!
def get_menu(url, heades): """ 根據每一頁的網址 獲得每個鏈接對應的子網址 params: url 網址 """ 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) # 查找每個子網址對應的鏈接, 然後返回 children_url = html.xpath('//div[@class="news_list"]//article/figure/a/@href') for _ in children_url: yield _
獲取標題和圖片地址
為瞭盡量多的采集數據,我們把標簽和圖片地址采集一下,當然如果其他項目需要采集發佈者和時間,也是可以做到多的,本篇就不再展開。
我們點開一個網址鏈接,如上圖所示,可以發現標題在head的節點裡面,獲取標題是為創建文件夾時使用。
代碼如下:
def get_page(url, headers): """ 根據子頁鏈接,獲得圖片地址,然後打包下載 params: url 子網址 """ 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) # 獲得標題 title = html.xpath(r'//*[@id="main_article"]/header/h1/text()') # 獲得圖片地址 img = html.xpath(r'//div[@class="arc_body"]//figure/img/@src') # title 預處理 title = ''.join(title) title = re.sub(r'【|】', '', title) print(title) save_img(title, img, headers)
保存圖片
在翻轉每一頁時我們都需要把子鏈接對應的圖片保存下來,此處需要註意對請求的狀態判斷、路徑判斷。
def save_img(title, img, headers): """ 根據標題創建子文件夾 下載所有的img鏈接,選擇更改質量大小 params:title : 標題 params: img : 圖片地址 """ if not os.path.exists(title): os.mkdir(title) # 下載 for i, j in enumerate(img): # 遍歷該網址列表 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), '張下載完成!')
主函數
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) # 獲得一頁
至此我們已經完成瞭所有環節,關於爬蟲的文章,小編已經不止一次的介紹瞭,一方面是希望大傢可以多多熟悉爬蟲技巧,另外一方面小編認為爬蟲是數據分析、數據挖掘的基礎。沒有爬蟲獲取數據,何來數據分析。
以上就是python百行代碼實現漢服圈圖片爬取的詳細內容,更多關於python爬取漢服圈圖片的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- python爬蟲智能翻頁批量下載文件的實例詳解
- 教你如何利用python3爬蟲爬取漫畫島-非人哉漫畫
- Python爬蟲之線程池的使用
- Python數據提取-lxml模塊
- Python爬蟲獲取數據保存到數據庫中的超詳細教程(一看就會)