首頁  >  文章  >  後端開發  >  Python爬取APP下載連結的方法

Python爬取APP下載連結的方法

高洛峰
高洛峰原創
2017-02-24 15:07:582157瀏覽

首先是準備工作

Python 2.7.11:下載python

Pycharm:下載Pycharm

#其中python2和python3目前同步發行,我這裡使用的是python2作為環境。 Pycharm是比較有效率的Python IDE,但要付費。

實現的基本想法

首先我們的目標網站:安卓市場

點擊【應用程式】,進入我們的關鍵頁面:

Python爬取APP下載連結的方法

跳到應用程式介面後我們需要專注在三個地方,下圖紅色方塊標示:

Python爬取APP下載連結的方法

首先關注網址列的URL,再關注免費下載按鈕,然後再關注底端的翻頁選項。點擊「免費下載」按鈕就會立即下載對應的APP,所以我們的想法就是拿到這個點擊下載的連接,就可以直接下載APP了。

寫爬蟲

第一個要解決的點:我們怎麼拿到上面說的下載連結?這裡不得不介紹下瀏覽器展示網頁的基本原理。說簡單點,瀏覽器是一個類似解析器的工具,它得到HTML等程式碼的時候會按照對應的規則解析渲染,以便我們可以看到頁面。

這裡我使用的是Google瀏覽器,對著頁面右鍵,點擊“檢查”,可以看到網頁原本的HTML程式碼:

Python爬取APP下載連結的方法

看到眼花撩亂的HTML程式碼不用急,Google瀏覽器的審查元素有一個好用的小功能,可以幫我們定位頁面控制項對應的HTML程式碼

位置:

Python爬取APP下載連結的方法

如上圖所示,點選上方矩形框中的小箭頭,點選頁面對應的位置,在右邊的HTML程式碼中就會自動定位並高亮。

接下來我們定位到下載按鈕對應的HTML程式碼:

Python爬取APP下載連結的方法

#可以看到按鈕對應的程式碼中,存在著對應的下載連結:【/ appdown/com.tecent.mm】,加上前綴,完整的下載連結就是 http://apk.hiapk.com/appdown/com.tecent.mm

##首先使用python要拿到整個頁面的HTML,很簡單,使用「

requests.get(url) 」 ,url填入對應網址即可。

Python爬取APP下載連結的方法

接著,在抓取頁面關鍵資訊的時候,採取「先抓大、再抓小」的思路。可以看到一個頁面有10個APP,在HTML程式碼中對應10個item:

Python爬取APP下載連結的方法

#而每個li 標籤中,又包含各自APP的各個屬性(名稱、下載連結等)。所以第一步,我們將這10個li 標籤提取出來:


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


這裡用到了簡單的正規表示式知識

提取li 標籤中的下載連結:



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


接下來需要說的困難是翻頁,點擊下方的翻頁按鈕後我們可以看到網址列發生瞭如下變更:

Python爬取APP下載連結的方法

Python爬取APP下載連結的方法#

豁然开朗,我们可以在每次的请求中替换URL中对应的id值实现翻页。


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


爬虫效果

关键位置说完了,我们先看下最后爬虫的效果:

Python爬取APP下載連結的方法

在TXT文件中保存结果如下:

Python爬取APP下載連結的方法

直接复制进迅雷就可以批量高速下载了。

附上全部代码


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

class spider(object):
 def __init__(self):
  print u'开始爬取内容'
 def getsource(self,url):
  html = requests.get(url)
  return html.text

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

 def geteveryapp(self,source):
  everyapp = re.findall('(
  • )',source,re.S) return everyapp def getinfo(self,eachclass): info = {} str1 = str(re.search(&#39;<a href="(.*?)">&#39;, eachclass).group(0)) app_url = re.search(&#39;"(.*?)"&#39;, str1).group(1) appdown_url = app_url.replace(&#39;appinfo&#39;, &#39;appdown&#39;) info[&#39;app_url&#39;] = 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)

  • 总结

    选取的目标网页相对结构清晰简单,这是一个比较基本的爬虫。代码写的比较乱请见谅,以上就是这篇文章的全部内容了,希望能对大家的学习或者工作带来一定的帮助,如果有问题大家可以留言交流。

    更多Python爬取APP下載連結的方法相关文章请关注PHP中文网!

    陳述:
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn