1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      python怎么實現(xiàn)壁紙批量下載

      這篇“python怎么實現(xiàn)壁紙批量下載”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“python怎么實現(xiàn)壁紙批量下載”文章吧。

      承德網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)公司于2013年創(chuàng)立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司

      初始化項目

      該項目使用virtualenv創(chuàng)建一個虛擬環(huán)境,以避免污染整個情況。使用pip3直接下載:

      Pip3installvirtualenv然后在合適的地方創(chuàng)建一個新的壁紙-下載器目錄,使用virtualenv創(chuàng)建一個名為venv的虛擬環(huán)境:

      virtualenvvenv。venv/bin/激活下一步,創(chuàng)建一個依賴目錄:

      最后,yun下載并安裝依賴項:

      pip  3 install-requirements  . txt分析爬蟲工作步驟

      為了簡單起見,我們直接進入分類為“航空”的壁紙列表頁面

      python怎么實現(xiàn)壁紙批量下載

      如您所見,本頁有10張壁紙可供下載。但是因為這里顯示的都是縮略圖,作為壁紙的定義遠遠不夠,所以需要進入壁紙詳情頁才能找到HD的下載鏈接。點擊第一張壁紙,你可以看到一個新的頁面:

      python怎么實現(xiàn)壁紙批量下載

      因為我的機器是Retina屏幕,所以打算直接下載最大的,保證高清(紅圈顯示的音量)。

      了解具體步驟后,就是通過開發(fā)者工具找到對應(yīng)的dom節(jié)點,提取對應(yīng)的url。這個過程不再進行,讀者可以自行嘗試。接下來,輸入編碼部分。

      訪問頁面

      創(chuàng)建一個新的download.py文件,然后引入兩個庫:

      from  bs4 import美化組

      導入請求接下來,編寫一個訪問url然后返回頁面html的特殊函數(shù):

      defvisit_page(url):

      標題={

      用戶代理' : ' Mozilla/5.0(Macintosh;intelmacosx  10 _ 13 _ 1)apple  WebKit/537.36(KHTML,like  gecko)Chrome/63 . 0 . 3239 . 108 safari/537.36’

      }

      r=requests.get(url,headers=headers)

      r.encoding='utf-8 '

      soup=美化組(r.text,' lxml  ')

      為了防止returnsoup被網(wǎng)站的反抓取機制擊中,我們需要通過在頭部添加UA來將爬蟲偽裝成普通瀏覽器,然后指定utf-8編碼,最后以字符串格式返回html。

      提取鏈接

      獲取頁面html后,需要提取該頁面壁紙列表對應(yīng)的url:

      defget_paper_link(第:頁)

      links=page  . select(# contentidivullidiva)

      collect=[]

      forlinkinlinks:

      collect.append(link.get('href  '))

      函數(shù)returncollect將提取列表頁面中所有壁紙詳細信息的url。

      下載壁紙

      有了詳細頁面的地址,我們就可以進去選擇合適的尺寸。分析頁面的dom結(jié)構(gòu)后,我們可以知道每個大小對應(yīng)一個鏈接:

      python怎么實現(xiàn)壁紙批量下載

      所以第一步是提取對應(yīng)于這些大小的鏈接:

      paper_source=visit_page(link) wallpaper_size_links=wallpaper_source.select('#wallpaper-resolutions>a') size_list=[] forlinkinwallpaper_size_links: href=link.get('href') size_list.append({ 'size':eval(link.get_text().replace('x','*')), 'name':href.replace('/download/',''), 'url':href })

      size_list就是這些鏈接的一個集合。為了方便接下來選出最高清(體積最大)的壁紙,在size中我使用了eval方法,直接把這里的5120x3200給計算出來,作為size的值。

      獲取了所有的集合之后,就可以使用max()方法選出最高清的一項出來了:

      biggest_one=max(size_list,key=lambdaitem:item['size'])

      這個biggest_one當中的url就是對應(yīng)size的下載鏈接,接下來只需要通過requests庫把鏈接的資源下載下來即可:

      result=requests.get(PAGE_DOMAIN+biggest_one['url'])
      ifresult.status_code==200:
      open('wallpapers/'+biggest_one['name'],'wb').write(result.content)

      注意,首先你需要在根目錄下創(chuàng)建一個wallpapers目錄,否則運行時會報錯。

      整理一下,完整的download_wallpaper函數(shù)長這樣:

      defdownload_wallpaper(link):
      wallpaper_source=visit_page(PAGE_DOMAIN+link)
      wallpaper_size_links=wallpaper_source.select('#wallpaper-resolutions>a')
      size_list=[]
      forlinkinwallpaper_size_links:
      href=link.get('href')
      size_list.append({
      'size':eval(link.get_text().replace('x','*')),
      'name':href.replace('/download/',''),
      'url':href
      })
      biggest_one=max(size_list,key=lambdaitem:item['size'])
      print('Downloadingthe'+str(index+1)+'/'+str(total)+'wallpaper:'+biggest_one['name'])
      result=requests.get(PAGE_DOMAIN+biggest_one['url'])
      ifresult.status_code==200:
      open('wallpapers/'+biggest_one['name'],'wb').write(result.content)

      批量運行

      上述的步驟僅僅能夠下載第一個壁紙列表頁第一張壁紙。如果我們想下載多個列表頁全部壁紙,我們就需要循環(huán)調(diào)用這些方法。首先我們定義幾個常量:

      importsys
      iflen(sys.argv)!=4:
      print('3argumentswererequiredbutonlyfind'+str(len(sys.argv)-1)+'!')
      exit()
      category=sys.argv[1]
      try:
      page_start=[int(sys.argv[2])]
      page_end=int(sys.argv[3])
      except:
      print('Thesecondandthirdargumentsmustbeanumberbutnotastring!')
      exit()

      這里通過獲取命令行參數(shù),指定了三個常量categorypage_startpage_end,分別對應(yīng)著壁紙分類,起始頁頁碼,終止頁頁碼。

      為了方便起見,再定義兩個url相關(guān)的常量:

      PAGE_DOMAIN='http://wallpaperswide.com'
      PAGE_URL='http://wallpaperswide.com/'+category+'-desktop-wallpapers/page/'

      接下來就可以愉快地進行批量操作了,在此之前我們來定義一個start()啟動函數(shù):

      defstart():
      ifpage_start[0]<=page_end:
      print('Preparingtodownloadthe'+str(page_start[0])+'pageofallthe"'+category+'"wallpapers...')
      PAGE_SOURCE=visit_page(PAGE_URL+str(page_start[0]))
      WALLPAPER_LINKS=get_paper_link(PAGE_SOURCE)
      page_start[0]=page_start[0]+1
      forindex,linkinenumerate(WALLPAPER_LINKS):
      download_wallpaper(link,index,len(WALLPAPER_LINKS),start)

      然后把之前的download_wallpaper函數(shù)再改寫一下:

      defdownload_wallpaper(link,index,total,callback):
      wallpaper_source=visit_page(PAGE_DOMAIN+link)
      wallpaper_size_links=wallpaper_source.select('#wallpaper-resolutions>a')
      size_list=[]
      forlinkinwallpaper_size_links:
      href=link.get('href')
      size_list.append({
      'size':eval(link.get_text().replace('x','*')),
      'name':href.replace('/download/',''),
      'url':href
      })
      biggest_one=max(size_list,key=lambdaitem:item['size'])
      print('Downloadingthe'+str(index+1)+'/'+str(total)+'wallpaper:'+biggest_one['name'])
      result=requests.get(PAGE_DOMAIN+biggest_one['url'])
      ifresult.status_code==200:
      open('wallpapers/'+biggest_one['name'],'wb').write(result.content)
      ifindex+1==total:
      print('Downloadcompleted!\n\n')
      callback()

      最后指定一下啟動規(guī)則:

      if__name__=='__main__':
      start()

      運行項目

      在命令行輸入如下代碼開始測試:

      python3download.pyaero12

      然后可以看到下列輸出:

      python怎么實現(xiàn)壁紙批量下載

      拿charles抓一下包,可以看到正在腳本正在平穩(wěn)地運行中:

      python怎么實現(xiàn)壁紙批量下載

      以上就是關(guān)于“python怎么實現(xiàn)壁紙批量下載”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


      網(wǎng)頁名稱:python怎么實現(xiàn)壁紙批量下載
      文章鏈接:http://www.ef60e0e.cn/article/jisgcj.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        绥棱县| 甘洛县| 长寿区| 哈尔滨市| 河源市| 丘北县| 阜平县| 调兵山市| 威宁| 德惠市| 香港 | 车险| 西乌珠穆沁旗| 土默特左旗| 上犹县| 从化市| 通榆县| 荥阳市| 安义县| 汝州市| 南京市| 呼和浩特市| 肥城市| 涡阳县| 徐州市| 龙胜| 广平县| 额济纳旗| 宜城市| 缙云县| 民县| 波密县| 祁阳县| 江达县| 台中市| 盐山县| 贺州市| 富顺县| 扬州市| 玉溪市| 云霄县|