首先是準備工作
Python 2.7.11:下載python
Pycharm:下載Pycharm
#其中python2和python3目前同步發行,我這裡使用的是python2作為環境。 Pycharm是比較有效率的Python IDE,但要付費。
實現的基本想法
首先我們的目標網站:安卓市場
點擊【應用程式】,進入我們的關鍵頁面:
跳到應用程式介面後我們需要專注在三個地方,下圖紅色方塊標示:
首先關注網址列的URL,再關注免費下載按鈕,然後再關注底端的翻頁選項。點擊「免費下載」按鈕就會立即下載對應的APP,所以我們的想法就是拿到這個點擊下載的連接,就可以直接下載APP了。
寫爬蟲
第一個要解決的點:我們怎麼拿到上面說的下載連結?這裡不得不介紹下瀏覽器展示網頁的基本原理。說簡單點,瀏覽器是一個類似解析器的工具,它得到HTML等程式碼的時候會按照對應的規則解析渲染,以便我們可以看到頁面。
這裡我使用的是Google瀏覽器,對著頁面右鍵,點擊“檢查”,可以看到網頁原本的HTML程式碼:
看到眼花撩亂的HTML程式碼不用急,Google瀏覽器的審查元素有一個好用的小功能,可以幫我們定位頁面控制項對應的HTML程式碼
位置:
如上圖所示,點選上方矩形框中的小箭頭,點選頁面對應的位置,在右邊的HTML程式碼中就會自動定位並高亮。
接下來我們定位到下載按鈕對應的HTML程式碼:
#可以看到按鈕對應的程式碼中,存在著對應的下載連結:【/ appdown/com.tecent.mm】,加上前綴,完整的下載連結就是 http://apk.hiapk.com/appdown/com.tecent.mm
##首先使用python要拿到整個頁面的HTML,很簡單,使用「requests.get(url) 」 ,url填入對應網址即可。
def geteveryapp(self,source): everyapp = re.findall('(<li class="list_item".*?</li>)',source,re.S) #everyapp2 = re.findall('(<p class="button_bg button_1 right_mt">.*?</p>)',everyapp,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
#
豁然开朗,我们可以在每次的请求中替换URL中对应的id值实现翻页。
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
爬虫效果
关键位置说完了,我们先看下最后爬虫的效果:
在TXT文件中保存结果如下:
直接复制进迅雷就可以批量高速下载了。
附上全部代码
#-*_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('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('(
总结
选取的目标网页相对结构清晰简单,这是一个比较基本的爬虫。代码写的比较乱请见谅,以上就是这篇文章的全部内容了,希望能对大家的学习或者工作带来一定的帮助,如果有问题大家可以留言交流。
更多Python爬取APP下載連結的方法相关文章请关注PHP中文网!