python爬取快手商品数据
工具:fiddlerpostman逍遥模拟器
首先使用fiddler抓取app数据,打开快手,刷新,可以看到会有很多的http/https请求,找到快手首页数据加载请求。
请求数据格式分析:post请求,header是dictionary形式,data是字符串形式。(data不可以写成dict方式)
打开psotman测试
form-data方式提交报错
换成raw方式提交,报错信息改变
加上headers
成功返回数据,测试几次,发现返回结果不同,数据不存在重复
```importrequests
defgetData:
url='http://apissl.gifshow.com/rest/n/feed/hot?isp=CMCC&mod=HUAWEI(DUK-AL20)&lon=121.492379&country_code=cn&kpf=ANDROID_PHONE&extId=b31ce9a7bacb2f567efe7aff2b7374b2&did=ANDROID_066f7438a673e208&kpn=KUAISHOU&net=WIFI&app=0&oc=XIAOMI&ud=561252472&hotfix_ver=&c=XIAOMI&sys=ANDROID_5.1.1&appver=6.6.6.10150&ftt=&language=zh-cn&iuid=&lat=31.247192&did_gt=1585204347787&ver=6.6&max_memory=192'
data='type=7&page=1&coldStart=true&count=10&pv=false&id=27&refreshTimes=0&pcursor=&source=1&extInfo=Ql8KhQ1TWK3G/BbYoGCWMyeL5iDBfPA/idqooiNmt6Sv37LFyINoRqajhRM13g6jvLoVaFQw/C3VuLeniF/t5uIEuVPBTdVWblmJF/VO+F5Li9n6yXafEiuGnWoFc9zvZgr4YkxHP9pltJvuTY410DjWMaCil2VEd36XsCZpmWw=&needInterestTag=false&browseType=1&seid=253e59e9-a137-42dd-b291-d957f43c8cf8&volume=0.73&backRefresh=false&__NStokensig=c4cb4271f3211c34c16d5cd834e98ebda150c6d957cb82bdf8e1a95ffeb304e2&kuaishou.api_st=Cg9rdWFpc2hvdS5hcGkuc3QSoAG2q0g-deb-tNjkILe6FTBSUwhf_6370CSDML5jTC-YDUhKtu4CRYvHyXm9wwmV1QAfyzb9TzHaVqol-DGyQLQFfZcfDc3IwVQ5lm5sQiaIwzk31MWR_BL6CXpncKcN3jdqNINZ0AEiBBft8RF8OgGRkK4K0Ia3jsH-M8Ur_jajTALiR5BQeEWSDyUtJy1vE48Gheu9i4prF6y3kVkvXJLFGhJey_IdJfJMt4oIXuVy7QAVNNEiIPGtBaWs1gYPdT7lm853QU351FcL0w-RSQ6bwUAxFxSzKAUwAQ&token=abd7df7449c64f46a562a313f74fc72d-561252472&client_key=3c2cd3f3&os=android&sig=29a919db9a8c66aff96c0e1e3dfc9031'
headers={
'User-Agent':'kwai-android',
'Content-Type':'application/x-www-form-urlencoded'
}
html=requests.post(url,data=data,headers=headers,timeout=5)
print(html.text)
ifname=='main':
getData
```
总结:其实这种爬取快手方式有点投机取巧,因为post过去的参数sig是签名,是有加密的,只所以还能返回数据是因为每次都是请求的一样的链接,page=1都是第一页的,当改成2的时候,就验签失败了。虽然达到了效果,但却没有能破解他的加密算法。