抖音愛豆榜單爬蟲

抖音入駐明星信息爬取

採用Charles抓取接口數據,而後解析。html

遇到的問題,Charles監聽配置問題python

第一步,分析目標站點mysql

使用安卓模擬器下載抖音短視頻app,下載charles,而且進行配置。sql

www.charlesproxy.com/charles下載地址數據庫

  • 配置charkes 按照網上的教程進行,

https unknown 問題的解決json

由於https是加密的,Charles須要配置證書才能夠抓包。瀏覽器

安裝證書安全

電腦端網絡

點擊 Help -- SSL Proxying -- Install Charles Root Certificateapp

能夠看到可怕的不信任紅字,系統默認對Charles證書是不信任的,別慌,咱們雙擊Charles證書

點開左邊的信任,選擇始終信任,點關閉,彈出帳戶密碼驗證,填一下就改好了

回到證書列表能夠看到Charles證書已經受信任了

手機端 點擊 Help -- SSL Proxying -- Install Charles Root Certificate on a Mobile Device or Remote Browser

彈出提示,手機wifi網絡配置代理

而後就能夠在手機瀏覽器輸入 chls.pro/ssl 下載證書

證書下載下來是一個 *.pem 的文件,咱們須要重命名爲 *.crt 文件,否則沒法安裝,有的瀏覽器直接下載下來就是 *.crt 文件,看運氣~~ 而後進入手機設置安裝,在此以小米6手機爲例,點擊 設置 -- 更多設置 -- 系統安全 -- 加密與憑據 -- 從存儲設備安裝 找到剛纔瀏覽器下載證書的路徑選擇安裝,爲證書起個名字

點肯定,輸入帳戶密碼完成安裝,回到Charles

能夠看到https連接下終於再也不顯示了,而是感人的數據!

參考:www.cnblogs.com/Zachary46/p…

配置好以後,再次操做app,就能夠看到抓包的數據了。

找到要抓去的數據的url的地址是

aweme-hl.snssdk.com/aweme/v1/ho…

能夠看出,大概是50個一頁,數據以json格式保存。

import requests
import re
import json
import pymysql
def get_page(url):
    headers = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
    baseurl = 'https://aweme-hl.snssdk.com/aweme/v1/hotsearch/star/list/?count=50&offset='
    url = baseurl + str(url) +'&sort_type=2&type=1'
    print(url)
    html = requests.get(url= url,verify =  False )
    print(url)
    return html

def parse_page(html):
    hjson = json.loads(html.text)
    #douyin = re.compile('.*?"followers":(.*),.*?',html.text)
    star_list=hjson['star_list']
    for i in range(0,50):
        followers=star_list[i]['followers']
        nickname = star_list[i]['user_info']['nickname']
        signature = star_list[i]['user_info']['signature']
        uid = star_list[i]['user_info']['uid']
        avatar_larger = star_list[i]['user_info']['avatar_larger']['url_list'][0]
        print(followers)
        print(nickname)
        print(signature)
        print(uid)
        print(avatar_larger)
        item = {
            'uid':uid,
            'nickname' : nickname,
            'followers': followers,
            'avatar_larger':avatar_larger,
            'signature' : signature
        }
        save_page(item)

def save_page(data):
    db = pymysql.connect(host='你的數據庫地址', user='你的用戶名', password='你的密碼', port=3306, db='spider')
    cursor = db.cursor()
    table = 'douyin'
    keys = ', '.join(data.keys())
    values = ', '.join(['%s'] * len(data))

    sql = 'INSERT INTO {table}({keys}) VALUES ({values}) ON DUPLICATE KEY UPDATE'.format(table=table, keys=keys,
                                                                                         values=values)
    update = ','.join([" {key} = %s".format(key=key) for key in data])
    sql += update
    try:
        if cursor.execute(sql, tuple(data.values()) * 2):
            print('Successful')
            db.commit()
    except:
        print('Failed')
        db.rollback()
    db.close()

def main():
    for a in range(0,13):
        a = a*50
        html =get_page(a)
        parse_page(html)

main()
複製代碼
相關文章
相關標籤/搜索