Python ile TDK'den veri çekme

from requests import *
from bs4 import *

kelime=input()
url=f"https://sozluk.gov.tr/gts?ara={kelime}"
header={
    
       }
cevap=get(url,headers=header)
content=get(url,headers=header).content

soup = BeautifulSoup(content,"html.parser")
print(soup)

çıktısı

[{"madde_id":"40844","kac":"0","kelime_no":"34824","cesit":"0","anlam_gor":"0","on_taki":null,"madde":"masa","cesit_say":"2","anlam_say":"5","taki":null,"cogul_mu":"0","ozel_mi":"0","lisan_kodu":"393","lisan":"Rumca","telaffuz":null,"birlesikler":"masabaşı, masa örtüsü, masa saati, masa takvimi, masa tenisi, masa topu, masaüstü, yuvarlak masa toplantısı, ameliyat masası, bilardo masası, bilgisayar masası, buzul masası, daktilo masası, fiskos masası, içki masası, iflas masası, infaz masası, kriz masası, orta masası, oyun masası, peri masası, pinpon masası, reji masası, şeytanmasası, teşrih masası, tuvalet masası, ütü masası, yazı masası, yemek masası","font":null,"madde_duz":"masa","gosterim_tarihi":null,"anlamlarListe":[{"anlam_id":"60055","madde_id":"40844","anlam_sira":"1","fiil":"0","tipkes":"0","anlam":"Ayaklar veya bir destek üzerine oturtulmuş tabladan oluşan mobilya","gos":"0","orneklerListe":[{"ornek_id":"11922","anlam_id":"60055","ornek_sira":"1","ornek":"Arkasındaki masada biri gözlüklü iki adam vardı.","kac":"1","yazar_id":"227","yazar":[{"yazar_id":"227","tam_adi":"Yusuf Atılgan","kisa_adi":"Y. Atılgan","ekno":"456"}]}],"ozelliklerListe":[{"ozellik_id":"19","tur":"3","tam_adi":"isim","kisa_adi":"a.","ekno":"30"}]},{"anlam_id":"60056","madde_id":"40844","anlam_sira":"2","fiil":"0","tipkes":"0","anlam":"Bu mobilya etrafında oturanların tümü","gos":"0"},{"anlam_id":"60057","madde_id":"40844","anlam_sira":"3","fiil":"0","tipkes":"0","anlam":"Dairelerde, kurumlarda belli konularla ilgili işlerin görüldüğü bölüm","gos":"0","orneklerListe":[{"ornek_id":"11923","anlam_id":"60057","ornek_sira":"1","ornek":"Kaçakçılık masası. Kıbrıs masası.","kac":"1","yazar_id":"0"}]},{"anlam_id":"60058","madde_id":"40844","anlam_sira":"4","fiil":"0","tipkes":"0","anlam":"Düz duruşlu yer, düzlek yapı","gos":"0","ozelliklerListe":[{"ozellik_id":"45","tur":"1","tam_adi":"coğrafya","kisa_adi":"coğ.","ekno":"94"}]},{"anlam_id":"60059","madde_id":"40844","anlam_sira":"5","fiil":"0","tipkes":"0","anlam":"İç içe geçme ayaklarıyla yüksekliği ayarlanabilen masa biçiminde atlama aracı","gos":"0","ozelliklerListe":[{"ozellik_id":"40","tur":"1","tam_adi":"spor","kisa_adi":"sp.","ekno":"89"}]}],"atasozu":[{"madde_id":"40845","madde":"masaya oturmak","on_taki":null},{"madde_id":"40846","madde":"masaya yatırmak","on_taki":null}]}]

bu çıktı içerisindeki

"anlamlarListe":[{"anlam_id":"60055","madde_id":"40844","anlam_sira":"1","fiil":"0","tipkes":"0","anlam":"Ayaklar veya bir destek üzerine oturtulmuş tabladan oluşan mobilya"

arkadaşlar soup’u yazdırabiliyorum fakat find_all işlemini yapıp başka bir değişkene atarsam bana “[ ]” çıktısını veriyor bunu nasıl düzeltebilirim

1 Beğeni

Şu an detaylı bakamıyorum ama şunu denesen önce;

cikti = soup[0]

yaptıktan sonra cikti üzerinde daha rahat işlem yaparsın.

Bir de bs kullanımını dene. bs.BeautifulSoup(content,"html.parser") şeklinde.

düzeltme. Üstteki satırlar hatalı.

2 Beğeni

Bende çalışmıyor bu program sebebini anlayamadım.
(Kütüphaneler yüklü)

Edit: Siteden kaynaklı sanırım başka sitelerde sorun yok kodda.

1 Beğeni

Ben de uğraştım bir yerde kullanmak için. Senin isteğine uyuyor sanırım yazdığım kod. Kullanabilirsin güle güle.

import requests
from bs4 import BeautifulSoup

URL = "https://sozluk.gov.tr/gts?ara=sonsuz"

html = requests.get(
    URL,
    headers={
        'User-Agent':
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36 Edg/86.0.622.58',
    }
).text.encode("utf-8")
soup = BeautifulSoup(html, "html.parser")
soup = str(soup.string)
anlamlar = soup.split("\"anlam\"")
anlamlar = anlamlar[1:]
sonuclar = []
for t in anlamlar:
    tgos = t.split("\"gos\"")
    temiz = tgos[0].replace(":","")
    temiz = temiz.replace("\"","")
    sonuclar.append(temiz)
for sonuc in sonuclar:
    print(sonuc)

Çıktısı aşağıdaki gibi. Değiştirebilirsin istediğin şekilde kodu.

ara=sonsuz için

Sonu olmayan, bitmeyen, ebedî,
Ölçülemeyecek kadar çok veya büyük olan,
Çok,
Birçok,
Sonu ve sınırı olmayan şey,
Sonu olmayan, her niceliği aşabilen değişken (nicelik),
1 Beğeni

çok teşekkür ederim hocam

anlamlar = soup.split("\"anlam\"")
anlamlar = anlamlar[1:]

hocam bu iki satırın mantığını anlatabilir misiniz acaba

Gereksiz bölümleri temizliyorum. Önce anlam ifadelerine göre bölüp sonra ilk kısmı sildim.

from requests import *
from bs4 import *
import re

kelime=input()
url=f"https://sozluk.gov.tr/gts?ara={kelime}"
header={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36"
       }
response=get(url,headers=header)
soup = BeautifulSoup(response.content,"html.parser")
print(soup,"\n",type(soup))
kaynak=str(soup.string)
anlam=re.search('"anlam"',kaynak)
gos=re.search('"gos"',kaynak)
a1=re.findall('"anlam"',kaynak)## Bu method istenilen içeriğin kaynak içerisinde kaç kere tekrarlandığını öğrenmemiz için bize bir liste yapısı döndürür.
g1=re.findall('"gos"',kaynak)
##a1 ve g1 listelerindeki eleman her kelime için birbirine eşittir.
l=[]
for i in range(len(a1)):
    anlam = re.search('"anlam"', kaynak) ##Bu method, aranılan bir içeriğin ilgili metin içerisinde olup olmadığını kontrol eder.Eğer birden fazla aynı içerik var ise işlemlerimizi ilk sıradakine göre yapmamızı sağlar.
    gos = re.search('"gos"', kaynak)
    span_a=anlam.span()## Bu method aranılan bir içeriğin başlagıç ve bitiş indekslerini bir liste içinde döndürür(başlangıç,bitiş)
    span_g=gos.span()
    l.append(kaynak[span_a[1]+1  :  span_g[0]-1])## İstenilen kelimelerin anlamları '"anlam"' ve '"gos"' arasındadır.
    kaynak=kaynak[span_g[1]:]## Buradaki amacımız ise search komutu ilk içeriğe göre işlem yaptığı için döngü her tekrarlandığında kaynaktan o içerikleri çıkarmak ve ikinci içerikleri birinci sıraya koymak.

print(l)

programın içine regex kütüphanesi ekledim ve işe yaradı

import requests


class TDK:
    SEARCH_URL = "https://sozluk.gov.tr/gts?ara="
    HEADERS = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 OPR/97.0.0.0",
        "X-Requested-With": "XMLHttpRequest",
        "Accept": "application/json, text/javascript, */*; q=0.01",
    }
    def __init__(self) -> None:
        self.response = None
        self.kelime = None
        pass

    def _raw_search(self, kelime) -> dict:
        if self.response is None or self.response[0].get("madde") != kelime:
            r = requests.get(f"{self.SEARCH_URL}{kelime}", headers=self.HEADERS)
            self.kelime = kelime
            self.response = r.json()

    def anlamlar(self, kelime) -> dict:
        self._raw_search(kelime)
        return self.response[0].get("anlamlarListe")
    
    def atasozu(self, kelime):
        self._raw_search(kelime)
        return self.response[0].get("atasozu")

OOP yeteneklerimi geliştirmeye çalıştığımdan biraz başlangıç aşamasındaki biri için karışık olabilir, muhtemelen daha iyi bir kod da yazılabilir ancak elimden geleni yaptım. Kolay gelsin.

edit: kullanıcının anadilinin Türkçe olacağını varsayarak sadece kişinin kullanacağı methodları Türkçe yazdım. Yarı İngilizce yarı Türkçe olma sebebi bu.