ホームページ  >  記事  >  バックエンド開発  >  APP ダウンロードリンクをクロールする Python メソッド

APP ダウンロードリンクをクロールする Python メソッド

高洛峰
高洛峰オリジナル
2017-02-24 15:07:582110ブラウズ

まずは準備作業です

Python 2.7.11: python をダウンロード

Pycharm: Pycharm をダウンロード

このうち、現在 python2 と python3 が同時リリースされており、ここでは python2 を環境として使用しています。 Pycharm は比較的効率的な Python IDE ですが、支払いが必要です。

実装の基本的な考え方

まず第一に、ターゲットWebサイト: Androidマーケット

[App]をクリックしてキーページに入ります:

APP ダウンロードリンクをクロールする Python メソッド

アプリケーションインターフェースにジャンプした後、下の写真の赤いボックスでマークされた 3 つの場所に注意する必要があります:

APP ダウンロードリンクをクロールする Python メソッド

まずアドレスバーの URL に注意し、次に無料ダウンロード ボタンに注意してください。下部にあるページめくりオプション。 「無料ダウンロード」ボタンをクリックすると、対応する APP がすぐにダウンロードされるため、クリックしてダウンロード リンクを取得し、APP を直接ダウンロードするという考えです。

クローラーの作成

解決する必要がある最初の点: 上記のダウンロード リンクをどのように取得するか?ここで、ブラウザが Web ページを表示する方法の基本原理を紹介する必要があります。簡単に言うと、ブラウザはパーサーに似たツールで、HTML やその他のコードを取得すると、対応するルールに従って解析してレンダリングし、ページを表示します。

ここでは Google Chrome を使用しています。ページを右クリックして [検査] をクリックすると、Web ページの元の HTML コードが表示されます。

APP ダウンロードリンクをクロールする Python メソッド

HTML コードが表示されても心配しないでください。Google Chrome のレビューです。要素 ページ コントロールに対応する HTML コードを見つけるのに役立つ小さな関数があります

場所:

APP ダウンロードリンクをクロールする Python メソッド

上の図に示すように、上の長方形のボックス内の小さな矢印をクリックし、対応する位置をクリックしますページの右側 HTML コードが自動的に配置され、強調表示されます。

次に、ダウンロード ボタンに対応する HTML コードを見つけます:

APP ダウンロードリンクをクロールする Python メソッド

ボタンに対応するコードには、対応するダウンロード リンク [/appdown/com.tecent.mm] があることがわかります。ダウンロードリンクは http://apk.hiapk.com/appdown/com.tecent.mm です

まず Python を使用してページ全体の HTML を取得します。これは非常に簡単です。対応する URL を入力します。 requests.get(url)

APP ダウンロードリンクをクロールする Python メソッド

次に、ページの重要な情報を取得するときは、「最初に大きな情報を把握し、次に小さな情報を把握する」という考え方を採用します。 HTML コードの 10 個の項目に対応して、1 ページに 10 個の APP があることがわかります:

APP ダウンロードリンクをクロールする Python メソッド

そして、各 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


次の難題はページをめくる作業です。下のページめくりボタンをクリックすると、アドレス バーが次のように変化していることがわかります。

豁然开朗,我们可以在每次的请求中替换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


爬虫效果

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

APP ダウンロードリンクをクロールする Python メソッド

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

APP ダウンロードリンクをクロールする Python メソッド

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

附上全部代码


#-*_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)

  • 总结

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

    更多APP ダウンロードリンクをクロールする Python メソッド相关文章请关注PHP中文网!

    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。