首頁 後端開發 Python教學 Python爬取APP下載連結的方法

Python爬取APP下載連結的方法

Feb 24, 2017 pm 03:07 PM

首先是準備工作

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

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    Video Face Swap

    Video Face Swap

    使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

    熱工具

    記事本++7.3.1

    記事本++7.3.1

    好用且免費的程式碼編輯器

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    禪工作室 13.0.1

    禪工作室 13.0.1

    強大的PHP整合開發環境

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網頁開發工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級程式碼編輯軟體(SublimeText3)

    如何解決Linux終端中查看Python版本時遇到的權限問題? 如何解決Linux終端中查看Python版本時遇到的權限問題? Apr 01, 2025 pm 05:09 PM

    Linux終端中查看Python版本時遇到權限問題的解決方法當你在Linux終端中嘗試查看Python的版本時,輸入python...

    如何在使用 Fiddler Everywhere 進行中間人讀取時避免被瀏覽器檢測到? 如何在使用 Fiddler Everywhere 進行中間人讀取時避免被瀏覽器檢測到? Apr 02, 2025 am 07:15 AM

    使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

    在Python中如何高效地將一個DataFrame的整列複製到另一個結構不同的DataFrame中? 在Python中如何高效地將一個DataFrame的整列複製到另一個結構不同的DataFrame中? Apr 01, 2025 pm 11:15 PM

    在使用Python的pandas庫時,如何在兩個結構不同的DataFrame之間進行整列複製是一個常見的問題。假設我們有兩個Dat...

    Uvicorn是如何在沒有serve_forever()的情況下持續監聽HTTP請求的? Uvicorn是如何在沒有serve_forever()的情況下持續監聽HTTP請求的? Apr 01, 2025 pm 10:51 PM

    Uvicorn是如何持續監聽HTTP請求的? Uvicorn是一個基於ASGI的輕量級Web服務器,其核心功能之一便是監聽HTTP請求並進�...

    在Linux終端中使用python --version命令時如何解決權限問題? 在Linux終端中使用python --version命令時如何解決權限問題? Apr 02, 2025 am 06:36 AM

    Linux終端中使用python...

    如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎? 如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎? Apr 02, 2025 am 07:18 AM

    如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

    如何繞過Investing.com的反爬蟲機制獲取新聞數據? 如何繞過Investing.com的反爬蟲機制獲取新聞數據? Apr 02, 2025 am 07:03 AM

    攻克Investing.com的反爬蟲策略許多人嘗試爬取Investing.com(https://cn.investing.com/news/latest-news)的新聞數據時,常常�...

    See all articles