采用Charles抓取接口数据,而后解析。html
遇到的问题,Charles监听配置问题python
第一步,分析目标站点mysql
使用安卓模拟器下载抖音短视频app,下载charles,而且进行配置。sql
www.charlesproxy.com/charles下载地址数据库
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()
复制代码