Requests ile instagram hastaglarde arama yapmak

Arkadaslar selamlar python requests ile bir hesaba girip bir hashtag üzerinde paylaşılan gonderileri nasil alabilirim

Tarayıcıyı açıp öncelikle instagram giriş sayfasına gitmelisiniz.

Bu sayfada giriş yapmadan önce sağ tıklayıp incele demeniz gerekiyor.

Açılan bu yan pencerede üstte sekmeler bulunacak oradan Network olanı seçin.

Network penceresinde iken sayfayı sol altta bulunan sayfaları önce temizlemek için Ø buna benzer ikona tıklayın.

Sayfayı yenileyin.

Rastgele kullanıcı adı ve parola yazıp giriş denemesinde bulunun.

Bu sırada network penceresini inceleyin.

ajax/ adında (yanlış bir terim kullanıyor olabilirim) bir html dosyası oluştuğunu göreceksiniz.

Ona tıklayıp inceleyin. Header, payload başlıklarına tıklayıp neler olduğunu inceleyin.

header sekmesinde methoda dikkatinizi verin. POST işlemi ile ilgili url’e istek atılıyormuş.
image
Bunu öğrendik.

Scrollu aşağı kaydıralım.

Aşağıda Request Header başlıklı bölmeye gelin.

O bölmede bizim için önemli olan user-agent ve x-csrf token

user-agent’ı kopyalayabilirsiniz.

x-csrf token’a ulaşmak için login sayfasına get işlemi ile istek atmanız gerek. Sonucunda cookielere ulaşacak ve orada bulunan csrftoken’ı alacaksınız.

Videolu anlatımı:

Doğru giriş yaptıktan sonra hesabımıza ait cookieleri bir yerde tutmamız gerekiyor o yüzden o cookieleri eğişkene kaydedin.

Hastaglerdeki paylaşımlara ulaşmak için browserdan instagramdan aramaya gelip öylesine “#edit” adında bir hastage gidiyorum. Yine Netwıork sekmesine bakıyorum.

Ve bu ?tag_name=edit verisini buluyorum:

Görüldüğü üzere buldum.
image
İlgili adrese get işlemi ile istek atmamız gerekiyormuş.

Cookieleri bu sayfaya istek atarken kullanıyoruz.

header bölümünde yine aşağı inip Request Headers bölmesine geliyoruz.
Burada tek farklı yapacağımız şey user-agentin: Instagram 22.0.0.15.68 Android (23/6.0.1; 640dpi; 1440x2560; samsung; SM-G935F; hero2lte; samsungexynos8890; en_US) olması.

Doğru işlemlerden sonra bize dönecek yanıt şu şekilde:

{
  "count": 61150674,
  "data": {
    "id": "17843750815046334",
    "name": "edit",
    "media_count": 61150674,
    "follow_status": 0,
    "following": 0,
    "allow_following": 1,
    "allow_muting_story": true,
    "profile_pic_url": "https://instagram.fyei6-3.fna.fbcdn.net/v/t51.2885-15/297151107_1072546273397084_942861446137742094_n.jpg?stp=dst-jpg_e15_fr_s1080x1080&_nc_ht=instagram.fyei6-3.fna.fbcdn.net&_nc_cat=108&_nc_ohc=B-KmXGFA97kAX9z3f8j&tn=oNO0hc_J0FZss99n&edm=AGyKU4gBAAAA&ccb=7-5&ig_cache_key=Mjg5ODE4OTUyMjc4MjAzMzgwMg%3D%3D.2-ccb7-5&oh=00_AT_2sAM06SyuTvliRvP0nX5CrjM867f2BNK8a8XiWp7_Iw&oe=62F62074&_nc_sid=4cb768",
    "non_violating": 1,
    "related_tags": null,
    "subtitle": "Her hafta en popüler birkaç gönderiyi gör",
    "social_context": "",
    "social_context_profile_links": [],
    "social_context_facepile_users": [],
    "follow_button_text": null,
    "show_follow_drop_down": false,
    "formatted_media_count": "61,100.000",
    "challenge_id": null,
    "destination_info": null,
    "description": null,
    "debug_info": null,
    "fresh_topic_metadata": null,
    "promo_banner": null,
    "top": {
      "sections": [
        {
          "layout_type": "media_grid",
          "layout_content": {
            "medias": [
              {
                "media": {
                  "taken_at": 1659711149,
                  "pk": "2898189522782033802",
                  "id": "2898189522782033802_45133647910",
                  "device_timestamp": 165971113571,
                  "media_type": 2,
                  "code": "Cg4cAQFLpeK",
                  "client_cache_key": "Mjg5ODE4OTUyMjc4MjAzMzgwMg==.2",
                  "filter_type": 0,
                  "is_unified_video": false,
                  "location": {
                    "pk": 305271195,
                    "short_name": "Alight",
                    "facebook_places_id": 18213037461,
                    "external_source": "facebook_places",
                    "name": "Alight",
                    "address": "",
                    "city": "",
                    "has_viewer_saved": false,
                    "is_eligible_for_guides": false
                  },
.
.
.

Bu json çıktısı devam ediyor elbette…

2 Beğeni

Allah razi olsun hocam tesekkur ederim

1 Beğeni

Hocam tekrardan merhaba internette bu şekilde bir kod buldum siteye girebiliyorum fakat aynı cookie ile hastag linkine nasıl istek atacağimi bilmiyorum bir yol fakat çalışlmadı bunu nasıl yapabilirim How can i login in instagram with python requests? - Stack Overflow kod bu yardımcı olursanız minnettar kalırım

Bunu dener misiniz.

import requests
from datetime import datetime

def get_csrftoken() -> str:
    with requests.Session() as session:
        return session.get("https://www.instagram.com").cookies.get_dict()["csrftoken"] # İnstagram sayfasına ilk girişte bize verilen csrf tokeni alıyoruz

login_cookies = {}
def successfuly_login_cookies(username:str,password:str) -> bool:
    global login_cookies
    with requests.Session() as post_session:
        header = {
            "User-Agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36",
            "X-Requested-With": "XMLHttpRequest",
            "Referer": "https://www.instagram.com/accounts/login/",
            "x-csrftoken": get_csrftoken() # İlk girişte aldığımız csrf tokeni buraya yazıyoruz
        }
        data = {
            'username': username, # kullanıcı adımız
            'enc_password': f'#PWD_INSTAGRAM_BROWSER:0:{int(datetime.now().timestamp())}:{password}', # parolamız
            'queryParams': {},
            'optIntoOneTap': 'false'
            }
        ps = post_session.post("https://www.instagram.com/accounts/login/ajax/",headers=header,data=data)

        if ps.json()["authenticated"]: # giriş başarılı ise
            login_cookies.update(ps.cookies.get_dict()) # cookieleri belirttiğimiz değişkenin içerisine yaz
            return True # True değer döndür
        else: # giriş başarısız ise
            return False # False değer döndür

def hashtag_data() -> dict:
    if successfuly_login_cookies("Kullanıcı Adı","Parola"): # eğer True değer dönerse
        with requests.Session() as hastag_session:
            header = {
                "user-agent": "Instagram 22.0.0.15.68 Android (23/6.0.1; 640dpi; 1440x2560; samsung; SM-G935F; hero2lte; samsungexynos8890; en_US)",
                "content-type": "application/json; charset=utf-8",
                "x-csrftoken": login_cookies["csrftoken"], # giriş yaptıktan sonra hesabımıza ait csrf tokenimiz
            }
            data = {
                "tag_name": "edit" # aratacağımız hastag kelimemiz ben aklıma gelen ilk kelimeyi yazdım
            }
            hs = hastag_session.get("https://i.instagram.com/api/v1/tags/web_info/?tag_name=edit",headers=header,cookies=login_cookies,data=data)
            return hs.json()

if __name__ == "__main__":
    print(hashtag_data())

Hocam ne kadar teşekkür etsem az çok sağolun son bir soru bu json çıktısını hesaplara göre nasıl ayarlayabilirim. yani gelen jsonu nasıl parçalayabilirim hangi kısımdan ayırmam gerek

Json bir dictionary türünde çıktı.
Pythonda dictionaryler ile uğraştınız mı ?

Uğraştım hocam ama bu çok karışık geldi

hocam burada ’ tırnak ile veriler gösteriliyor siteye yapıştırınca olmuyor çift tırnak olması gerek bunu tek tek mı çıft tırnağa çevirmem gerek

İnstagrama browserdan girip response’u oradan alın
Öylesi çok daha kolay

Teşekkür ederim hocam :pray: :pray:

1 Beğeni