APP数据爬取

2021-12-05 23:13:58 浏览数 (1)

准备

爬取时间:2021/02/02

系统环境:Windows 10

所用工具:Jupyter NotebookPython 3.0Fiddler雷神模拟器

涉及的库:requestsjson

获取基础数据

小提示undefined ①模拟器不要用Android 7.0以上的内核,可能会导致抓包失败。undefined ②因为url签名会定期刷新,所以抓包后需尽快执行代码,不然url会失效。undefined 参考资料

使用fiddler 模拟器进行APP抓包

获取url

蛋肥想法:

原本计划是利用Fiddler 雷神模拟器去完成数据抓包,找到数据的url规律,但实际操作发现,url里带sign,百度了下sign的处理方法,感觉暂时超出了蛋肥的知识范围,所以这次利用雷神模拟器自带的“操作录制”功能,将论美区的页面自动下滑至底部,将Fiddler抓取的所有相关url地址导出,然后再去python里处理url。

代码语言:txt复制
#处理Fiddler里导出的url
代码语言:txt复制
file=open(r"C:UsersArcherDesktopurl.txt","r",encoding='utf-8')
代码语言:txt复制
url_list=file.read().split("n")

Fiddler抓取的部分url

获取cover地址

蛋肥想法: 通过url请求json,观察json结构发现“cover”对应封面照片的地址,可用之获取照片。

代码语言:txt复制
import requests
代码语言:txt复制
import json
代码语言:txt复制
#获取cover地址
代码语言:txt复制
def getpic(url):
代码语言:txt复制
    piclink=[]
代码语言:txt复制
    for each in url:
代码语言:txt复制
        link=each
代码语言:txt复制
        headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0"}
代码语言:txt复制
        r=requests.get(link,headers=headers,timeout=10)
代码语言:txt复制
        json_string=r.text
代码语言:txt复制
        json_data=json.loads(json_string)
代码语言:txt复制
        coverlist=json_data["data"]["list"]
代码语言:txt复制
        for each in coverlist:
代码语言:txt复制
            #因某些list里没有cover,做一个判断
代码语言:txt复制
            if "cover" in each:
代码语言:txt复制
                p=each["cover"]
代码语言:txt复制
                piclink.append(p)
代码语言:txt复制
    return(piclink)
代码语言:txt复制
#执行函数
代码语言:txt复制
a=getpic(url_list)
代码语言:txt复制
#为了获取原图去掉url里的resize
代码语言:txt复制
b=[x[:x.find("?")] for x in a]
代码语言:txt复制
#去掉列表里的空值
代码语言:txt复制
c=[x for x in b if x != ""]

获取照片

代码语言:txt复制
#获取照片
代码语言:txt复制
def downloadpic(link):
代码语言:txt复制
    for i in range(len(link)):
代码语言:txt复制
        print(link[i])
代码语言:txt复制
        piclink=link[i]
代码语言:txt复制
        pic=requests.get(piclink)
代码语言:txt复制
        with open(r'C:UsersArcherDesktop论美区照片img' str(i) '.png', 'wb') as f:
代码语言:txt复制
            f.write(pic.content)
代码语言:txt复制
#执行函数   
代码语言:txt复制
downloadpic(c)

0 人点赞