python 获取巨量星图数据

python 获取巨量星图数据巨量新图数据目前只获取了前端显示的数据,up主的详细信息有个前端加密,发起的请求需要sign对应才能拿到数据,而且星图的数据拿取到200条的时候就会监测出来,目前没有解决,有人找到星图的sign可

巨量新图数据目前只获取了前端显示的数据,up主的详细信息有个前端加密,发起的请求需要sign对应才能拿到数据,而且星图的数据拿取到200条的时候就会监测出来,目前没有解决,有人找到星图的sign可以探讨一下
1.首先想最简单的就是使用selenium模拟然后解析获取数据,但是网站直接监测到seleniun,百度过一些方法,如何跳过selenium监测,目前都没有实现,代码如下所示

from selenium.webdriver import Chrome
from selenium.webdriver import ChromeOptions

option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_experimental_option('useAutomationExtension', False)
# 设置不加载图片
# option.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})
driver = Chrome(options=option)
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { 
   
    "source": """ Object.defineProperty(navigator, 'webdriver', { get: () => undefined }) """
})

最后还是老老实实的使用request模块,代码比较简单,直接手动复制cookie,跳过登录,麻烦的就是去找js请求,还是使用chrome的network来进行抓包,目前的请求地址如下所示

https://www.xingtu.cn/v/api/demand/author_list/?limit=20&need_detail=true&page=1&platform_source=1&order_by=score&disable_replace_keyword=false&marketing_target=1&task_category=1&tag=1&is_filter=true

更具筛选条件的不一样,url也会增加对应的查询条件,多拿几次请求就好了。如何根据自己塞选的条件构建请求地址即可,我这里有一个配置文件,目前适配的也只有如下几个大类
配置文件

营销目标:品牌传播
内容类型:美食
内容类别小类是第几个:2
粉丝数量区间:
报价区间:
所在地域:
预期cpm:1-30
预期播放量:

解析配置文件

# 解析配置文件
def par_init():
    with open('init.txt', 'r') as fp:
        for i in fp:
            init_list.append(i.split(':')[-1].replace('\n', ''))
# 链接分类的标签
init_dict = { 
   '颜值达人':72, '美食':48, '搞笑剧情':97, '生活':36}
# 营销目标分类
mark_dict = { 
   '品牌传播':1, '电商带货':2}
def creat_url():
    item_multiplication = 10000
    if len(init_list[3]) != 0:
        min_fans = int(init_list[3].split('-')[0])
        max_fans = int(init_list[3].split('-')[1])
    if len(init_list[4]) != 0:
        min_price = int(init_list[4].split('-')[0])
        max_price = int(init_list[4].split('-')[1])
    if len(init_list[6]) != 0:
        min_expected_cpm = int(init_list[6].split('-')[0])
        max_expected_cpm = int(init_list[6].split('-')[1])
    if len(init_list[7]) != 0:
        max_expected_play = int(init_list[7].split('-')[0])
        min_expected_play = int(init_list[7].split('-')[1])
    base_url = 'https://www.xingtu.cn/v/api/demand/author_list/?limit=20&need_detail=true&page=1&' \
               'platform_source=1&order_by=score&disable_replace_keyword=false'
    # 市场还是品牌
    mark_target_url = '&marketing_target={}&task_category=1'
    # 大类
    target_url = '&tag={}'
    # 小类
    two_target_url = '&tag_level_two={}'
    fans_url = '&fans_min={}&fans_max={}'
    price_url = '&price_max={}&price_min={}'
    cpm_url = '&expected_cpm__ge={max}&expected_cpm__le={min}'
    play_url = '&expected_play_num__le={}&expected_play_num__ge={}'
    url_end = '&is_filter=true'
    base_url = base_url + mark_target_url.format(mark_dict[init_list[0]])
    base_url = base_url + target_url.format(init_dict[init_list[1]])
    if len(init_list[2]) != 0:
        # print(init_dict[init_list[1]] + int(init_list[2]))
        base_url = base_url + two_target_url.format(init_dict[init_list[1]] + int(init_list[2]))
    if len(init_list[3]) != 0:
        base_url = base_url + fans_url.format(min_fans * item_multiplication, max_fans * item_multiplication)
    if len(init_list[4]) != 0:
        base_url = base_url + price_url.format(max_price , min_price)
    if len(init_list[6]) != 0:
        # print(max_expected_cpm,min_expected_cpm)
        base_url = base_url + cpm_url.format(max = min_expected_cpm, min=max_expected_cpm)
    if len(init_list[7]) != 0:
        base_url = base_url + play_url.format(max_expected_play*item_multiplication, min_expected_play*item_multiplication)



    base_url+=url_end
    return base_url

链接构建完成先去获取一次总的数据,cookie用自己的就好了

# 获取总共的条数
def get_total_info():
    url = creat_url()
    headers = { 
   'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko)'
                             ' Chrome/92.0.4515.131 Safari/537.36'}
    cookies = { 
   'cookies':''}
    resopnse = requests.get(url=url, headers=headers, cookies=cookies)
    item = json.loads(resopnse.text)
    total = int(item['data']['pagination']['total_count'])
    print(total)
    return total

然后遍历总数来修改url中的page信息,重新发起请求,修改page信息,发起请求,解析数据即可

 url = re.sub(r'page=\d', 'page='+ str(index), url)

后期解决了sign会同步上来,不过这个的sign有点麻烦

今天的文章python 获取巨量星图数据分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/66437.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注