最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python爬取APP下載鏈接的實(shí)現(xiàn)方法

 更新時(shí)間:2016年09月30日 15:41:25   作者:CaptainXero  
這篇文章主要實(shí)現(xiàn)的是批量下載安卓APP。顯然用手點(diǎn)是不科學(xué)的。于是嘗試用Python寫了一個(gè)半自動(dòng)化的腳本。所謂半自動(dòng)化,就是把下載鏈接批量抓取下來,然后一起貼到迅雷里進(jìn)行下載,這樣可以快速批量下載。有需要的朋友們可以一起看看吧。

首先是準(zhǔn)備工作

Python 2.7.11:下載python

Pycharm:下載Pycharm

其中python2和python3目前同步發(fā)行,我這里使用的是python2作為環(huán)境。Pycharm是一款比較高效的Python IDE,但是需要付費(fèi)。

實(shí)現(xiàn)的基本思路

首先我們的目標(biāo)網(wǎng)站:安卓市場(chǎng)

點(diǎn)擊【應(yīng)用】,進(jìn)入我們的關(guān)鍵頁面:

跳轉(zhuǎn)到應(yīng)用界面后我們需要關(guān)注三個(gè)地方,下圖紅色方框標(biāo)出:

首先關(guān)注地址欄的URL,再關(guān)注免費(fèi)下載按鈕,然后關(guān)注底端的翻頁選項(xiàng)。點(diǎn)擊“免費(fèi)下載”按鈕就會(huì)立即下載相應(yīng)的APP,所以我們的思路就是拿到這個(gè)點(diǎn)擊下載的連接,就可以直接下載APP了。

編寫爬蟲

第一個(gè)需要解決的點(diǎn):我們?cè)趺茨玫缴厦嬲f的下載鏈接?這里不得不介紹下瀏覽器展示網(wǎng)頁的基本原理。說簡(jiǎn)單點(diǎn),瀏覽器是一個(gè)類似解析器的工具,它得到HTML等代碼的時(shí)候會(huì)按照相應(yīng)的規(guī)則解析渲染,從而我們能夠看到頁面。

這里我使用的是谷歌瀏覽器,對(duì)著頁面右鍵,點(diǎn)擊“檢查”,可以看到網(wǎng)頁原本的HTML代碼:

看到眼花繚亂的HTML代碼不用著急,谷歌瀏覽器的審查元素有一個(gè)好用的小功能,可以幫我們定位頁面控件對(duì)應(yīng)的HTML代碼

位置:

如上圖所示,點(diǎn)擊上方矩形框中的小箭頭,點(diǎn)擊頁面對(duì)應(yīng)的位置,在右邊的HTML代碼中就會(huì)自動(dòng)定位并高亮。

接下來我們定位到下載按鈕對(duì)應(yīng)的HTML代碼:

可以看到按鈕對(duì)應(yīng)的代碼中,存在相應(yīng)的下載鏈接:【/appdown/com.tecent.mm】,加上前綴,完整的下載鏈接就是 http://apk.hiapk.com/appdown/com.tecent.mm

首先使用python拿到整個(gè)頁面的HTML,很簡(jiǎn)單,使用“requests.get(url) ” ,url填入相應(yīng)網(wǎng)址即可。


接著,在抓取頁面關(guān)鍵信息的時(shí)候,采取“先抓大、再抓小”的思路。可以看到一個(gè)頁面有10個(gè)APP,在HTML代碼中對(duì)應(yīng)10個(gè)item:

而每個(gè) li 標(biāo)簽中,又包含各自APP的各個(gè)屬性(名稱、下載鏈接等)。所以第一步,我們將這10個(gè) li 標(biāo)簽提取出來:

def geteveryapp(self,source):
  everyapp = re.findall('(<li class="list_item".*?</li>)',source,re.S)
  #everyapp2 = re.findall('(<div class="button_bg button_1 right_mt">.*?</div>)',everyapp,re.S)
  return everyapp

這里用到了簡(jiǎn)單的正則表達(dá)式知識(shí)

提取 li 標(biāo)簽中的下載鏈接:

def getinfo(self,eachclass):
  info = {}
  str1 = str(re.search('<a href="(.*?)">', eachclass).group(0))
  app_url = re.search('"(.*?)"', str1).group(1)
  appdown_url = app_url.replace('appinfo', 'appdown')
  info['app_url'] = appdown_url
  print appdown_url
  return info

接下來需要說的難點(diǎn)是翻頁,點(diǎn)擊下方的翻頁按鈕后我們可以看到地址欄發(fā)生了如下變化:

豁然開朗,我們可以在每次的請(qǐng)求中替換URL中對(duì)應(yīng)的id值實(shí)現(xiàn)翻頁。

def changepage(self,url,total_page):
  now_page = int(re.search('pi=(\d)', url).group(1))
  page_group = []
  for i in range(now_page,total_page+1):
   link = re.sub('pi=\d','pi=%s'%i,url,re.S)
   page_group.append(link)
  return page_group

爬蟲效果

關(guān)鍵位置說完了,我們先看下最后爬蟲的效果:

在TXT文件中保存結(jié)果如下:

直接復(fù)制進(jìn)迅雷就可以批量高速下載了。

附上全部代碼

#-*_coding:utf8-*-
import requests
import re
import sys
reload(sys)
sys.setdefaultencoding("utf-8")

class spider(object):
 def __init__(self):
  print u'開始爬取內(nèi)容'
 def getsource(self,url):
  html = requests.get(url)
  return html.text

 def changepage(self,url,total_page):
  now_page = int(re.search('pi=(\d)', url).group(1))
  page_group = []
  for i in range(now_page,total_page+1):
   link = re.sub('pi=\d','pi=%s'%i,url,re.S)
   page_group.append(link)
  return page_group

 def geteveryapp(self,source):
  everyapp = re.findall('(<li class="list_item".*?</li>)',source,re.S)
  return everyapp

 def getinfo(self,eachclass):
  info = {}
  str1 = str(re.search('<a href="(.*?)">', eachclass).group(0))
  app_url = re.search('"(.*?)"', str1).group(1)
  appdown_url = app_url.replace('appinfo', 'appdown')
  info['app_url'] = appdown_url
  print appdown_url
  return info

 def saveinfo(self,classinfo):
  f = open('info.txt','a')
  str2 = "http://apk.hiapk.com"
  for each in classinfo:
   f.write(str2)
   f.writelines(each['app_url'] + '\n')
  f.close()

if __name__ == '__main__':

 appinfo = []
 url = 'http://apk.hiapk.com/apps/MediaAndVideo?sort=5&pi=1'
 appurl = spider()
 all_links = appurl.changepage(url, 5)
 for link in all_links:
  print u'正在處理頁面' + link
  html = appurl.getsource(link)
  every_app = appurl.geteveryapp(html)
  for each in every_app:
   info = appurl.getinfo(each)
   appinfo.append(info)
 appurl.saveinfo(appinfo)

總結(jié)

選取的目標(biāo)網(wǎng)頁相對(duì)結(jié)構(gòu)清晰簡(jiǎn)單,這是一個(gè)比較基本的爬蟲。代碼寫的比較亂請(qǐng)見諒,以上就是這篇文章的全部?jī)?nèi)容了,希望能對(duì)大家的學(xué)習(xí)或者工作帶來一定的幫助,如果有問題大家可以留言交流。

相關(guān)文章

最新評(píng)論

库尔勒市| 泽州县| 绥阳县| 遂昌县| 盐边县| 临江市| 阿克| 东山县| 邢台县| 高安市| 娄底市| 苍溪县| 砚山县| 平顶山市| 新和县| 广河县| 紫阳县| 墨脱县| 都匀市| 南乐县| 德兴市| 盐山县| 承德市| 巴中市| 神池县| 琼中| 新丰县| 万年县| 屯门区| 嘉兴市| 应用必备| 延安市| 巩义市| 锡林浩特市| 家居| 大渡口区| 内江市| 突泉县| 泰州市| 黄骅市| 崇明县|