天天看點

python爬蟲簡單爬取桌面

本次小實驗的目的爬取4k桌面網站的桌面,但以為實力有限是以隻能爬取網站樣圖,本次爬取的資料僅供學習使用。

網站樣式:

python爬蟲簡單爬取桌面

代碼部分:

import requests
import os
import time
from lxml import etree

if __name__ == "__main__":
    url = 'http://pic.netbian.com/'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36'
    }
    print('———————————————————搜尋桌面類型中————————————————————')
    print('——————————————————共搜尋到以下類型桌面——————————————————')
    #------(1)-------------首先對首頁請求 ,傳回所有的桌面類型------------

    r1 = requests.get(url =url ,headers =headers)
    r1.encoding = r1.apparent_encoding
    r1_html = r1.text
    tree1 = etree.HTML(r1_html)
    kind = tree1.xpath('//div[@class="classify clearfix"]/a/text()')
    a=1

    #------(2)------------列印搜尋到的所有類型------------------------

    for k in kind:
        print(str(a)+':'+str(k))
        a=a+1
    b = input('選擇需要下載下傳的類型(輸入對應的序号):')
    #擷取連接配接的字尾用于拼接

    #------(3)------------得到選擇類型對應的url和名稱-----------------

    kindurl = tree1.xpath('//div[@class="classify clearfix"]/a/@href')[int(b)-1]
    kindname = tree1.xpath('//div[@class="classify clearfix"]/a/text()')[int(b)-1]
    print('--------正在搜尋'+kindname+'--------')

    #------(4)------------對選中的類型進行請求-----------------------

    kind_url = 'http://pic.netbian.com'+kindurl
    r2 = requests.get(url = kind_url , headers = headers)
    r2.encoding = r2.apparent_encoding
    r2_html = r2.text
    tree2 = etree.HTML(r2_html)
    final_page = tree2.xpath('//div[@class="page"]/a[7]/text()')
    print('共搜尋到 '+str(final_page)+' 頁内容')
    #print(kind_url)
    page1 = int(input('從第幾頁開始下載下傳:'))
    page2 = int(input('到第幾頁結束下載下傳:'))

    #http://pic.netbian.com/4kdongman/index_4.html  表示第四頁的url,修改字尾實作
    #------(5)------------建立清單,存放需要請求的url
    final_url = []
    #------(6)-------------拼接每一頁的url---------------------------
    if page1 == 1:    #第一頁的url比較特殊,與其他頁不同,需要額外單獨存儲,故增加判斷語句
        final_url.append('http://pic.netbian.com'+kindurl+'index.html')
        for i in range(2,page2+1):
            url = 'http://pic.netbian.com'+kindurl+'index_'+str(i)+'.html'
            final_url.append(url)
    else:
        for i in range(page1,page2+1):
            url = 'http://pic.netbian.com'+kindurl+'index_'+str(i)+'.html'
            final_url.append(url)
    #print(final_url)

    #------(7)--------建立對應類型的檔案夾以存儲資料-----------
    #----------------根目錄為選中類型,子檔案以頁數命名-------
    file_path = os.path.abspath('./'+kindname+'('+str(page1)+'頁-'+str(page2)+'頁)')
    c=page1
    a=int(0)
    for i in range(page1,page2+1):
        file_name = file_path+'//第'+str(i)+'頁'
        os.makedirs(file_name)
        #建立完每一頁的檔案夾後請求,解析,儲存
        #設定a為kind_url[]索引,每次 a+1 來進行對頁面的翻頁操作
        #print()
        print('-------開始下載下傳第'+str(c)+'頁--------')
        time.sleep(5)
        r3 = requests.get(url=final_url[a], headers=headers)
        r3.encoding = r3.apparent_encoding
        r3_html = r3.text
        tree = etree.HTML(r3_html)
        # 拿到該頁每張圖檔的li标簽
        li_list = tree.xpath('//ul[@class="clearfix"]/li')
        r3.close()
        a=a+1
        # print(li_list)
        for li in li_list:
            # 圖檔名稱
            img_name = li.xpath('./a/img/@alt')[0] + '.jpg'
            # 圖檔的連結
            img_url = 'http://pic.netbian.com' + li.xpath('./a/img/@src')[0]
            time.sleep(5)
            # 使用拼接的圖檔位址請求
            img_data = requests.get(url=img_url, headers=headers).content

            # 儲存圖檔的路徑
            img_path = file_name+'/'+ img_name
            with open(img_path, 'wb') as fp:
                fp.write(img_data)
                print(img_name, '下載下傳成功!')

        print('-------第'+str(c)+'頁下載下傳完畢!----------')
        c=c+1
    print('**********'+kindname+':'+str(page1)+'頁到'+str(page2)+'頁下載下傳完成!!!!!!!!')
           

代碼輸出

python爬蟲簡單爬取桌面