python3 動態網頁爬蟲

一個好朋友要爬個app排行網頁,我就以一杯星巴克賣出去啦。
網頁鏈接:http://qianfan.analysys.cn/view/rank/app.html
我們使用Python3,主要用到re,requests模塊。

一般來說爬蟲的流程是這樣:先看網頁源代碼,再找到要爬的字段出現的區域,用正則表達式找到這個字段,再打印或者導出結果。

我們先看這個網頁,需要爬的是排行、app和UV:
我們要爬的是這三列數
用python看下源代碼(瀏覽器也可以,右鍵:查看網頁源代碼)

# -*- coding:utf-8 -*-
import re
import urllib.request

with urllib.request.urlopen('http://qianfan.analysys.cn/view/rank/app.html') as response:
    html = response.read().decode('utf-8')
print(html)

看到搜索微信並沒有內容,判斷爲動態網頁

看到搜索微信並沒有內容,判斷爲動態網頁

因此,得先找到這個網頁填充數據的源文件。

Chrome爲例,F12找到Network,找一下傳送方式爲POST的數據頁(表單數據)
有四個POST,感覺那個appTOPRank比較靠譜
有四個POST,感覺那個appTOPRank比較靠譜。

看看Response
我們看看返回的數據,發現裏面有許多app的信息:類別、介紹等。

很愉快的點開表頭Headers找找它的url:
Headers

複製到瀏覽器裏看看:

chrome直接爲我們建了格式,發現這與排行榜是一致的。但是隻有20個。

經過多次查找,發現這個是數量的要求,在data裏,請求訪問網站時需要加上這個datas:

數量

datas={'pageSize':'1000'}

這個1000可以修改,你想抓幾個就填幾個。

接下來就是python實現爬蟲(可以直接使用):

# -*- coding:utf-8 -*-
import re
import requests

datas={'pageSize':'1000'}

html=requests.post('http://qianfan.analysys.cn/qianfan/appTop/appTopRank',data = datas).content.decode('utf-8')     #用post的方式訪問。網頁解碼成中文

reg_rank=r'"rank":(.*?),"id"'    #找到排名所在的代碼區域,複製前後內容,把需要爬的內容替換爲(.*?)
reg_app = r'"appName":"(.*?)","isDisplay"' #app名稱
reg_UV=r'"activeNums":(.*?),"trend"'  #活躍

outcome_rank= re.findall(reg_rank, html)  #利用正則模塊找到需要的內容
outcome_app = re.findall(reg_app , html)
outcome_UV = re.findall(reg_UV, html)

for i in range(0,len(outcome_rank)): #以排行數量爲準
    print (outcome_rank[i],outcome_app[i],outcome_UV[i])  #打印出結果,結果是個list,我們用for語句將裏面的裏面的內容一個一個輸出。(這裏就不追求格式了)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章