<rp id="wnpn7"><ruby id="wnpn7"></ruby></rp>
<progress id="wnpn7"><track id="wnpn7"><rt id="wnpn7"></rt></track></progress>
<ruby id="wnpn7"></ruby>
<ruby id="wnpn7"><blockquote id="wnpn7"><div id="wnpn7"></div></blockquote></ruby>

    1. <em id="wnpn7"><ruby id="wnpn7"><input id="wnpn7"></input></ruby></em>
      1. <button id="wnpn7"><acronym id="wnpn7"></acronym></button><button id="wnpn7"><acronym id="wnpn7"></acronym></button>

        <rp id="wnpn7"><acronym id="wnpn7"></acronym></rp>

        <li id="wnpn7"><object id="wnpn7"><u id="wnpn7"></u></object></li>
        VB.net 2010 視頻教程 VB.net 2010 視頻教程 python基礎視頻教程
        SQL Server 2008 視頻教程 c#入門經典教程 Visual Basic從門到精通視頻教程
        當前位置:
        首頁 > 編程開發 > python入門 >
        • python入門教程之Python新手爬蟲三:爬取PPT模板

        本站最新發布   Python從入門到精通|Python基礎教程
        試聽地址  
        http://www.squ68.com/eschool/python.html


        爬取網站:第一PPT(http://www.1ppt.com/ 此網站真的良心 大寫的牛

        老樣子,先上最后成功的源碼:

        復制代碼
        import requests
        import urllib
        import os
        from bs4 import BeautifulSoup
        from fake_useragent import UserAgent
        
        def getPPT(url):
             f = requests.get(url,headers=headers)   #發送GET請求
             f.encoding = f.apparent_encoding    #設置編碼方式
            soup1 = BeautifulSoup(f.text,'lxml')
            classHtml = soup1.find('div',class_="col_nav i_nav clearfix").select('a')    #在html中尋找類別
            for i in classHtml[:56]:
                classUrl = i['href'].split('/')[2] #將ppt模板類別關鍵詞存到classUrl
                
                if not os.path.isdir(r'D:\PPT\\'+i['title']):   #判斷有無此目錄
                    os.mkdir(r'D:\PPT\\'+i['title']) #若無,創建此目錄。
                else:
                    continue    #若有此目錄,直接退出循環,就認為此類別已經下載完畢了
                
                n = 0
                for y in range(1,15):   #假設每個類別都有14頁ppt(頁數這一塊找了很久,沒找到全部獲取的方法,只能采取此措施)
                    pagesUrl = url+i['href']+'/ppt_'+classUrl+'_'+str(y)+'.html'
                    a = requests.get(pagesUrl,headers=headers)
                    
                    if a.status_code != 404:    #排除狀態碼為404的網頁
                        soup2 = BeautifulSoup(a.text,'lxml')
                        
                        for downppt in soup2.find('ul',class_='tplist').select('li > a'):   #獲取下載界面的URL
                            b = requests.get(url+downppt['href'],headers=headers)
                            b.encoding = b.apparent_encoding    #設置編碼類型
                            soup3 = BeautifulSoup(b.text,'lxml')
                            downList = soup3.find('ul',class_='downurllist').select('a')    #獲取下載PPT的URL
                            pptName = soup3.select('h1')   #ppt模板名稱
                            print('Downloading......')
                            try:
                                urllib.request.urlretrieve(downList[0]['href'],r'D:\PPT\\'+i['title']+'/'+pptName[0].get_text()+'.rar')    #開始下載模板
                                print(i['title']+'type template download completed the '+str(n)+' few.'+pptName[0].get_text())
                                n += 1
                            except:
                                print(i['title']+'type download failed the '+str(n)+' few.')
                                n += 1
        
        if __name__ == '__main__':
            headers = {'user-agent':UserAgent().random} #定義請求頭
            getPPT('http://www.1ppt.com')
        復制代碼

        效果圖:

         

        邏輯其實挺簡單的,代碼也不算復雜。

        代碼基本都有注釋,先一起捋一遍邏輯吧,邏輯搞清楚,代碼不在話下。

         

        1、首先網站首頁:F12—>選擇某個類別(比如科技模板)右擊—>檢查—>查看右側的html代碼

         

        發現類別的URL保存在 <div class="col_nav" i_nav clearfix下的 <li> 標簽里的 <a> 標簽的 href 屬性值中

        于是想到用 BeautifulSoup 庫的 find() 方法和 select() 方法

         

        2、進入類別界面

        同樣:F12—>選擇某個PPT(例如第一個)右擊—>檢查—>查看右側html代碼

        照葫蘆畫瓢,繼續獲取進入下載界面的URL,方法同上

        但在此頁面需要注意的是,下邊有選頁標簽:

        我暫時沒有想到準確獲取一共有多少頁的方式,所以我在此代碼中選擇用range()函數來假設每個類別都有14頁,然后再進行一步判斷,看返回的http狀態碼是否為200。

         

        3、進入具體PPT的下載界面

        與上操作相同,獲取最終PPT的下載URL

        我在此代碼中選擇用 urllib 庫來進行下載,最終將相對應類別的PPT放置同一文件夾中。

        文件夾操作我是調用 os 庫,具體代碼還是往上翻一翻吧。

         

        具體流程就這么幾步了,剩下的就是循環 循環 再循環......

        循環語句寫好,就大功告成了!一起努力。

        相關教程
                
        免费看成年人视频大全_免费看成年人视频在线观看