溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用python百行代碼實現漢服圈圖片爬取

發(fā)布時間:2021-11-23 08:55:37 來源:億速云 閱讀:134 作者:小新 欄目:開發(fā)技術

這篇文章主要介紹如何使用python百行代碼實現漢服圈圖片爬取,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

分析網站

網址如下:

https://www.aihanfu.com/zixun/tushang-1/

這是第一頁的網址,根據觀察,第二頁網址也就是上述網站序號1變成了2,依次類推,就可以訪問全部頁數。

如何使用python百行代碼實現漢服圈圖片爬取

根據圖示,我們需要獲得每個子網站的鏈接,也就是href中網址,然后進入每個網址,尋找圖片網址,在下載就行了。

子鏈接獲取

為了獲取上圖中的數據,我們可以用soup或者re或者xpath等方法都可以,本文中小編使用xpath來定位,編寫定位函數,獲得每個子網站鏈接,然后返回主函數,這里使用了一個技巧,在for循環(huán)中,可以看看!

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 _

獲取標題和圖片地址

為了盡量多的采集數據,我們把標簽和圖片地址采集一下,當然如果其他項目需要采集發(fā)布者和時間,也是可以做到多的,本篇就不再展開。

如何使用python百行代碼實現漢服圈圖片爬取

我們點開一個網址鏈接,如上圖所示,可以發(fā)現標題在head的節(jié)點里面,獲取標題是為創(chuàng)建文件夾時使用。

代碼如下:

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/h2/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)

保存圖片

在翻轉每一頁時我們都需要把子鏈接對應的圖片保存下來,此處需要注意對請求的狀態(tài)判斷、路徑判斷。

def save_img(title, img, headers):
    """
    根據標題創(chuàng)建子文件夾
    下載所有的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)  # 獲得一頁

至此我們已經完成了所有環(huán)節(jié),關于爬蟲的文章,小編已經不止一次的介紹了,一方面是希望大家可以多多熟悉爬蟲技巧,另外一方面小編認為爬蟲是數據分析、數據挖掘的基礎。沒有爬蟲獲取數據,何來數據分析。

以上是“如何使用python百行代碼實現漢服圈圖片爬取”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI