iT邦幫忙

0

Python crawler 相同網址不同payload

  • 分享至 

  • xImage

各位大大好!

想詢問關於一些關於爬蟲的問題
之前有做關於IG的爬蟲,然而最近可能IG有改版導致那隻爬蟲不能使用了,
但遇到了一些困擾,上網找也找不太到相符合的資料,所以上來發文問各位大大,
我所需要的資料在F12->Network中 "https://www.instagram.com/api/graphql" 這個網址
https://ithelp.ithome.com.tw/upload/images/20240321/20142897o8RTB7Ztjx.png
所需資料
https://ithelp.ithome.com.tw/upload/images/20240321/20142897GXMqtIcTKi.png

但在Network中有許多相同網址,代表他所帶的payload都不同,得出不同的資料,
但在處理好headers(其中cookie是抓取電腦上登入IG後的cookie)和payload後,post後也成功response 200,但卻得到一個HTML
而我使用request.url獲得我目前網址前往查看,抓下來的確實是其中的HTML,
https://ithelp.ithome.com.tw/upload/images/20240321/201428976fbMeXuvN8.png

想詢問各位大大這部分的如何使用 requests 去解決呢?
或是問題可能可以往哪裡去處理呢?
非常抱歉目前想說給自己挑戰只使用requests解決,所以想詢問各位大大

程式碼:

import requests
import json

url = f'https://www.instagram.com/api/graphql'

payload = {
    'av':fbid,
    'variables':{"data":{"count":12,"include_relationship_info":True,"latest_besties_reel_media":True,"latest_reel_media":True},"username":f"{user}","__relay_internal__pv__PolarisShareMenurelayprovider":False},
    '__d':'www',
    '__user': '0',
    '__a': '1',
    '__req': '2',
    '__hs': '19797.HYP:instagram_web_pkg.2.1..0.1',
    'dpr': '1.5',
    '__ccg': 'UNKNOWN',
    '__rev': f'{rev[0]}',
    '__s': '4bty40:w41dwq:jbfeh4',
    '__hsi': f'{hsi[0]}',
    '__dyn': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    '__csr': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    '__comet_req': '7',
    'fb_dtsg': f'{token[0]}',
    'jazoest': f'{jazoest}',
    'lsd': f'{lsd[0]}',
    '__spin_r': f'{rev[0]}',
    '__spin_b': 'trunk',
    '__spin_t': f'{spin_t[0]}',
    'fb_api_caller_class': 'RelayModern',
    'fb_api_req_friendly_name': 'PolarisProfilePostsQuery',
    'server_timestamps': True,
    'doc_id': f'{doc_id}'
}

payload = json.dumps(payload)

request = requests.post(url,headers={
        'cookie':f'ig_did={ig_did}; ig_nrcb=1;datr=xxxxxxxxxxxx;fbm_{fbm}=base_domain=.instagram.com; ps_n=0; ps_l=0;'+cookies+f'fbsr_{fbm}=xxxxxxxxxxxxxxxxxx',
        'User-Agent':'Instagram 219.0.0.12.117 Android',
        'Content-Type':'application/x-www-form-urlencoded',
        'X-Ig-App-Id':f'{XIGAppID}'
    },data=payload
    )
    
    
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
貓虎皮
iT邦新手 3 級 ‧ 2024-07-09 16:16:32

目前API分成兩種,一種是透過網頁反向工程得到的,一種則是Meta修訂後的API服務。

  1. 與您所使用的訪問網址類似,不過多加了一層query,且須附上query_hash參數,使網址變為「 https://www.instagram.com/graphql/query/?query_hash=...&variables=...
    參見他人部落格: https://easonwang.gitbook.io/web_advance/instagram_api
  2. 參見Meta官網: https://developers.facebook.com/products/instagram/apis/

希望有幫助到您=^w^=

我要發表回答

立即登入回答