Python爬取APP下載鏈接的實(shí)現(xià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)站:安卓市場
點(diǎn)擊【應(yīng)用】,進(jìn)入我們的關(guān)鍵頁面:
跳轉(zhuǎn)到應(yīng)用界面后我們需要關(guān)注三個地方,下圖紅色方框標(biāo)出:
首先關(guān)注地址欄的URL,再關(guān)注免費(fèi)下載按鈕,然后關(guān)注底端的翻頁選項(xiàng)。點(diǎn)擊“免費(fèi)下載”按鈕就會立即下載相應(yīng)的APP,所以我們的思路就是拿到這個點(diǎn)擊下載的連接,就可以直接下載APP了。
編寫爬蟲
第一個需要解決的點(diǎn):我們怎么拿到上面說的下載鏈接?這里不得不介紹下瀏覽器展示網(wǎng)頁的基本原理。說簡單點(diǎn),瀏覽器是一個類似解析器的工具,它得到HTML等代碼的時候會按照相應(yīng)的規(guī)則解析渲染,從而我們能夠看到頁面。
這里我使用的是谷歌瀏覽器,對著頁面右鍵,點(diǎn)擊“檢查”,可以看到網(wǎng)頁原本的HTML代碼:
看到眼花繚亂的HTML代碼不用著急,谷歌瀏覽器的審查元素有一個好用的小功能,可以幫我們定位頁面控件對應(yīng)的HTML代碼
位置:
如上圖所示,點(diǎn)擊上方矩形框中的小箭頭,點(diǎn)擊頁面對應(yīng)的位置,在右邊的HTML代碼中就會自動定位并高亮。
接下來我們定位到下載按鈕對應(yīng)的HTML代碼:
可以看到按鈕對應(yīng)的代碼中,存在相應(yīng)的下載鏈接:【/appdown/com.tecent.mm】,加上前綴,完整的下載鏈接就是 http://apk.hiapk.com/appdown/com.tecent.mm
首先使用python拿到整個頁面的HTML,很簡單,使用“requests.get(url)
” ,url填入相應(yīng)網(wǎng)址即可。
接著,在抓取頁面關(guān)鍵信息的時候,采取“先抓大、再抓小”的思路??梢钥吹揭粋€頁面有10個APP,在HTML代碼中對應(yīng)10個item:
而每個 li 標(biāo)簽中,又包含各自APP的各個屬性(名稱、下載鏈接等)。所以第一步,我們將這10個 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
這里用到了簡單的正則表達(dá)式知識
提取 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ā)生了如下變化:
豁然開朗,我們可以在每次的請求中替換URL中對應(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)頁相對結(jié)構(gòu)清晰簡單,這是一個比較基本的爬蟲。代碼寫的比較亂請見諒,以上就是這篇文章的全部內(nèi)容了,希望能對大家的學(xué)習(xí)或者工作帶來一定的幫助,如果有問題大家可以留言交流。
- python實(shí)現(xiàn)的爬取電影下載鏈接功能示例
- Python3.6實(shí)現(xiàn)根據(jù)電影名稱(支持電視劇名稱),獲取下載鏈接的方法
- python3 實(shí)現(xiàn)的人人影視網(wǎng)站自動簽到
- Python3使用requests登錄人人影視網(wǎng)站的方法
- python b站視頻下載的五種版本
- Python爬蟲之批量下載喜馬拉雅音頻
- 教你用Python下載抖音無水印視頻
- Python Django搭建文件下載服務(wù)器的實(shí)現(xiàn)
- 教你如何使用Python下載B站視頻的詳細(xì)教程
- python基于tkinter制作m3u8視頻下載工具
- 用python制作個論文下載器(圖形化界面)
- 用Python自動下載網(wǎng)站所有文件
- python 爬取影視網(wǎng)站下載鏈接
相關(guān)文章
Python的dict字典結(jié)構(gòu)操作方法學(xué)習(xí)筆記
這篇文章主要介紹了Python的dict字典結(jié)構(gòu)操作方法學(xué)習(xí)筆記本,字典的操作是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2016-05-05教女朋友學(xué)Python(一)運(yùn)行環(huán)境搭建
這篇文章主要介紹了教女朋友學(xué)Python(一)運(yùn)行環(huán)境搭建,具有一定借鑒價值,需要的朋友可以參考下。2017-11-11Python中pip安裝非PyPI官網(wǎng)第三方庫的方法
這篇文章主要介紹了Python中pip安裝非PyPI官網(wǎng)第三方庫的方法,pip最新的版本(1.5以上的版本), 出于安全的考 慮,pip不允許安裝非PyPI的URL,本文就給出兩種解決方法,需要的朋友可以參考下2015-06-06python中的import絕對導(dǎo)入與相對導(dǎo)入詳解
這篇文章主要介紹了python中的import絕對導(dǎo)入與相對導(dǎo)入詳解,在使用python做一些簡單項(xiàng)目時,import一般不會出現(xiàn)問題,但項(xiàng)目結(jié)構(gòu)復(fù)雜時,import可能發(fā)生報錯,需要的朋友可以參考下2023-11-11