爬虫cookie过期_python instagram 爬虫
生活随笔
收集整理的這篇文章主要介紹了
爬虫cookie过期_python instagram 爬虫
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
葉湘?zhèn)?#xff1a;【文字篇】如何系統(tǒng)地自學(xué) Python??zhuanlan.zhihu.com
直接介紹一下具體的步驟以及注意點(diǎn):
instagram 爬蟲注意點(diǎn)
- instagram 的首頁(yè)數(shù)據(jù)是 服務(wù)端渲染的,所以首頁(yè)出現(xiàn)的 11 或 12 條數(shù)據(jù)是以 html 中的一個(gè) json 結(jié)構(gòu)存在的(additionalData), 之后的帖子加載才是走 ajax 請(qǐng)求的
- 在 2019/06 之前,ins 是有反爬機(jī)制的,請(qǐng)求時(shí)需要在請(qǐng)求頭加了 'X-Instagram-GIS' 字段。其算法是:
1、將 rhx_gis 和 queryVariables 進(jìn)行組合
2、然后進(jìn)行 md5 哈希
e.g.
queryVariables = '{"id":"' + user_id + '","first":12,"after":"' +cursor+ '"}'print(queryVariables)headers['X-Instagram-GIS'] = hashStr(GIS_rhx_gis + ":" + queryVariables)- 但是在在 2019/06 之后, instagram 已經(jīng)取消了 X-Instagram-GIS 的校驗(yàn),所以無需再生成 X-Instagram-GIS,上一點(diǎn)內(nèi)容可以當(dāng)做歷史來了解了
- 初始訪問 ins 首頁(yè)的時(shí)候會(huì)設(shè)置一些 cookie,設(shè)置的內(nèi)容 (response header) 如下:
- 關(guān)于 query_hash,一般這個(gè)哈希值不用怎么管,可以直接寫死
- 特別注意:在每次請(qǐng)求時(shí)務(wù)必帶上自定義的 header,且 header 里面要有 user-agent,這樣子才能使用 rhx_gis 來進(jìn)行簽名訪問并且獲取到數(shù)據(jù)。切記!是每次訪問!例如:
大部分 api 的訪問需要在請(qǐng)求頭的 cookie 中攜帶 session-id 才能得到數(shù)據(jù),一個(gè)正常的請(qǐng)求頭 (request header) 如下:
:authority: www.instagram.com:method: GET:path: /graphql/query/?query_hash=ae21d996d1918b725a934c0ed7f59a74&variables=%7B%22fetch_media_count%22%3A0%2C%22fetch_suggested_count%22%3A30%2C%22ignore_cache%22%3Atrue%2C%22filter_followed_friends%22%3Atrue%2C%22seen_ids%22%3A%5B%5D%2C%22include_reel%22%3Atrue%7D:scheme: httpsaccept: */*accept-encoding: gzip, deflate, braccept-language: zh-CN,zh;q=0.9,en;q=0.8,la;q=0.7cache-control: no-cachecookie: mid=XI-joQAEAAHpP4H2WkiI0kcY3sxg; csrftoken=Or4nQ1T3xidf6CYyTE7vueF46B73JmAd; ds_user_id=11859524403; sessionid=11859524403%3Al965tcIRCjXmVp%3A25; rur=PRN; urlgen="{"45.63.123.251": 20473}:1hGKIj:JvyKtYz_nHgBsLZnKrbSq0FEfeg"pragma: no-cachereferer: https://www.instagram.com/user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36x-ig-app-id: 936619743392459x-instagram-gis: 8f382d24b07524ad90b4f5ed5d6fccdbx-requested-with: XMLHttpRequest- 注意 user-agent、x-ig-app-id (html 中的 sharedData 中獲取)、x-instagram-gis,以及 cookie 中的 session-id 配置
- end_cursor 即為 after 的值,has_next_page 檢測(cè)是否有下一頁(yè)
如果是有下一頁(yè),可進(jìn)行第一次分頁(yè)數(shù)據(jù)請(qǐng)求,第一次分頁(yè)請(qǐng)求的響應(yīng)數(shù)據(jù)回來之后,id,first 的值不用變,after 的值變?yōu)轫憫?yīng)數(shù)據(jù)中 page_info 中 end_cursor 的值,再構(gòu)造 variables,連同 query_hash 發(fā)起再下一頁(yè)的請(qǐng)求
再判斷響應(yīng)數(shù)據(jù)中的 page_info 中 has_next_page 的值,循環(huán)下去,可拿完全部數(shù)據(jù)。若不想拿完,可利用響應(yīng)數(shù)據(jù)中的 edge_owner_to_timeline_media 中的 count 值來做判斷,該值表示用戶總共有多少媒體 - 視頻帖子和圖片帖子數(shù)據(jù)結(jié)構(gòu)不一樣,注意判斷響應(yīng)數(shù)據(jù)中的 is_video 字段
- 如果是用一個(gè) ins 賬號(hào)去采集的話,只要請(qǐng)求頭的 cookie 中帶上合法且未過期的 session_id,可直接訪問接口,無需計(jì)算簽名。
最直接的做法是:打開瀏覽器,登錄 instagram 后,F12 查看 xhr 請(qǐng)求,將 request header 中的 cookie 復(fù)制過來使用即可,向下面:
封裝成庫(kù)了!
如果還有問題未能得到解決,搜索887934385交流群,進(jìn)入后下載資料工具安裝包等。最后,感謝觀看!
總結(jié)
以上是生活随笔為你收集整理的爬虫cookie过期_python instagram 爬虫的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 拦截qq消息,[Andr
- 下一篇: python 生成式,迭代器,生成器