Python JavaScript tarafından işlenmiş tablodan nasıl veri çekilir?

DaggeroN

Hectopat
Katılım
29 Kasım 2020
Mesajlar
101
Çözümler
1
Daha fazla  
Cinsiyet
Erkek
Web Site: Yargitay Karar Arama

Ekran görüntüsünde görünen tabloya erişmek için önce birtakım seçimler yapmanız gerekiyor. Ben detaylı arama kısmında "12. Hukuk Dairesi" seçtikten sonra bu tablo önüme geliyor. Python ile bu işlemleri yaptırdıktan sonra tabloya erişemiyorum. Birçok kütüphane ile denedim ancak sürekli hata aldım. Yardımcı olur musunuz?

Amacım tablo sıralaması yaptıktan sonra yalnızca karar kısmında yazan verileri çekmek. Örneğin "2023/2735, 2023/2706 ...". Mümkünse 2165 veri için aynısını yapmak istiyorum. 2165 verinin yalnızca karar numaralarını nasıl çekebiliriz?

Python:
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import requests
import pandas as pd
from bs4 import BeautifulSoup
from requests_html import HTMLSession

session = HTMLSession()

chromeOptions = webdriver.ChromeOptions()
chromeOptions.add_argument("--incognito")

driver = webdriver.Chrome(chrome_options = chromeOptions)
driver.maximize_window()

driver.get("https://karararama.yargitay.gov.tr/")

detayArama = driver.find_element(By.XPATH, '//*[@id="detay"]')
detayArama.click()
sleep(2)

hukuk = driver.find_element(By.XPATH, '//*[@id="collapseDetaylıArama"]/div/div[3]/div[2]/div/button')
hukuk.click()
sleep(.5)

hd12 = driver.find_element(By.XPATH, '//*[@id="bs-select-3-11"]')
hd12.click()
sleep(.5)
hukuk.click()
sleep(.5)

yil = driver.find_element(By.XPATH, '//*[@id="kararNoYil"]')
yil.send_keys("2023")
sleep(.5)

kararno = driver.find_element(By.XPATH, '//*[@id="collapseDetaylıArama"]/div/div[10]/div[2]/div/label[2]/span')
kararno.click()
sleep(.5)

ara = driver.find_element(By.XPATH, '//*[@id="detaylıAramaG"]')
ara.click()
sleep(.5)

kayitgoster = driver.find_element(By.XPATH, '//*[@id="detayAramaSonuclar_length"]/label/select')
kayitgoster.click()
sleep(.5)

kayit100 = driver.find_element(By.XPATH, '//*[@id="detayAramaSonuclar_length"]/label/select/option[4]')
kayit100.click()
sleep(.5)
 

Dosya Ekleri

  • Ekran görüntüsü 2023-05-29 093057.png
    Ekran görüntüsü 2023-05-29 093057.png
    182 KB · Görüntüleme: 32
Son düzenleyen: Moderatör:
Hemen Firefox indiriyorsun. Network Analyzer'ı açıyorsun. Yaptığın işlemlerin https isteklerini dinliyorsun. Pythonda da request ile bir güzel taklit ediyorsun.
 
Forumda daha önceki bu site hakkındaki konuları açan da sen miydin?

Bunun yerine API isteklerini inceleseydin şuan o sitenin klonunu yerel bilgisayarına koymuştun bile.
Hocam bilmediğim veya yapamadığım için forumda konu açıyorum zaten.

API üzerinden tüm veriyi çektim ancak bu sefer de verideki "kararNo" içeriğini sıralayamıyorum.

Python:
import requests
import json

url = "https://karararama.yargitay.gov.tr/aramadetaylist"

for x in range(1, 23):
    payload = {"data": {
            "arananKelime": "",
            "hukuk": "12. Hukuk Dairesi",
            "esasYil": "",
            "esasIlkSiraNo": "",
            "esasSonSiraNo": "",
            "kararYil": "2023",
            "kararIlkSiraNo": "",
            "kararSonSiraNo": "",
            "baslangicTarihi": "",
            "bitisTarihi": "",
            "siralama": "2",
            "siralamaDirection": "desc",
            "birimYrgKurulDaire": "",
            "birimYrgHukukDaire": "12. Hukuk Dairesi",
            "birimYrgCezaDaire": "",
            "pageSize": 100,
            "pageNumber": x
        }}
    headers = {
        "Accept": "*/*",
        "Accept-Language": "tr-TR,tr;q=0.9,en-US;q=0.8,en-GB;q=0.7,en;q=0.6,la;q=0.5,mt;q=0.4",
        "Cache-Control": "no-cache",
        "Connection": "keep-alive",
        "Content-Type": "application/json; charset=UTF-8",
        "Cookie": "JSESSIONID=2626BE80D5F0AABC8A669B085994C5E6",
        "Origin": "https://karararama.yargitay.gov.tr",
        "Pragma": "no-cache",
        "Referer": "https://karararama.yargitay.gov.tr/",
        "Sec-Fetch-Dest": "empty",
        "Sec-Fetch-Mode": "cors",
        "Sec-Fetch-Site": "same-origin",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36",
        "X-Requested-With": "XMLHttpRequest",
        "sec-ch-ua": "'Google Chrome';v='113', 'Chromium';v='113', 'Not-A.Brand';v='24'",
        "sec-ch-ua-mobile": "?0",
        "sec-ch-ua-platform": "'Windows'"
    }

    r = requests.request("POST", url, json=payload, headers=headers)

    data = r.json()

    print(data)
 
Sıralama ve sıralama direction diye iki farklı değer yolluyorsun. Onlarla oynamayı denedin mi?

desc değil de date dene bakalım. (Tamamen içgüdü bu arada salladım yani.)

Bu arada bu api'yi hangi mühendis yaptıysa yüzüne tükürmek lazım. Yarı İngilizce Yarı Türkçe api mi olur.
 
Sıralama ve sıralama direction diye iki farklı değer yolluyorsun. Onlarla oynamayı denedin mi?

desc değil de date dene bakalım. (Tamamen içgüdü bu arada salladım yani.)
Python:
print(data['data']['data'][0]["kararNo"])

Bu kod ile yalnızca her sayfanın başındaki ilk karar numarasını sıralıyor.

Çıktısı şu şekilde.

Kod:
2023/2735
2023/2440
2023/2230
2023/2075
2023/1921
2023/1797
2023/1645
2023/1536
2023/1411
2023/1304
2023/1091
2023/981
2023/869
2023/769
2023/667
2023/567
2023/466
2023/366
2023/265
2023/165
2023/65
 
@DaggeroN
Atacağın adres:
https://karararama.yargitay.gov.tr/aramadetaylist

Atacağın json body:

JSON:
{
    "data": {
        "arananKelime": "",
        "baslangicTarihi": "01.01.2023",
        "birimYrgCezaDaire": "",
        "birimYrgHukukDaire": "12. Hukuk Dairesi",
        "birimYrgKurulDaire": "",
        "bitisTarihi": "31.12.2023",
        "esasIlkSiraNo": "",
        "esasSonSiraNo": "",
        "esasYil": "",
        "hukuk": "12. Hukuk Dairesi",
        "kararIlkSiraNo": "",
        "kararSonSiraNo": "",
        "kararYil": "",
        "pageNumber": 1,
        "pageSize": 10,
        "siralama": "3",
        "siralamaDirection": "desc"
    }
}
Bu şekilde dönen response son karardan ilk karara doğru gelir.
 
@DaggeroN
Atacağın adres:
https://karararama.yargitay.gov.tr/aramadetaylist

Atacağın json body:

JSON:
{
    "data": {
        "arananKelime": "",
        "baslangicTarihi": "01.01.2023",
        "birimYrgCezaDaire": "",
        "birimYrgHukukDaire": "12. Hukuk Dairesi",
        "birimYrgKurulDaire": "",
        "bitisTarihi": "31.12.2023",
        "esasIlkSiraNo": "",
        "esasSonSiraNo": "",
        "esasYil": "",
        "hukuk": "12. Hukuk Dairesi",
        "kararIlkSiraNo": "",
        "kararSonSiraNo": "",
        "kararYil": "",
        "pageNumber": 1,
        "pageSize": 10,
        "siralama": "3",
        "siralamaDirection": "desc"
    }
}
Bu şekilde dönen response son karardan ilk karara doğru gelir.

Hocam hatalı matalı ama aşağıdaki kod ile sıraladım. Şimdi de bunu Google E-Tablolar'a atmasını falan öğreneceğim :) Teşekkürler yardımın için.

Python:
for y in range(0, 100):
    print(data['data']['data'][y]['kararNo'])
    sleep(.01)
 

Yeni konular

Geri
Yukarı