python 获取巨量星图数据
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                python 获取巨量星图数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                巨量新圖數據目前只獲取了前端顯示的數據,up主的詳細信息有個前端加密,發起的請求需要sign對應才能拿到數據,而且星圖的數據拿取到200條的時候就會監測出來,目前沒有解決,有人找到星圖的sign可以探討一下
 1.首先想最簡單的就是使用selenium模擬然后解析獲取數據,但是網站直接監測到seleniun,百度過一些方法,如何跳過selenium監測,目前都沒有實現,代碼如下所示
最后還是老老實實的使用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也會增加對應的查詢條件,多拿幾次請求就好了。如何根據自己塞選的條件構建請求地址即可,我這里有一個配置文件,目前適配的也只有如下幾個大類
 配置文件
解析配置文件
# 解析配置文件 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 = 10000if 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_endreturn 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 获取巨量星图数据的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 蓝桥杯 历届试题 小朋友排队 C++
 - 下一篇: 5G标准中文版核心网:5G的系统构架!