抖音爱豆榜单爬虫

抖音入驻明星信息爬取

采用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()
复制代码
相关文章
相关标签/搜索