• 06-05-2023, 08:32:31
    #1
    Python'da bilgim çok fazla yok arkadaşlar. Yardımcı olursanız sevinirim.
    Bir websitesinde yer alan son başlıkları çekmek istiyorum. Son veri değiştiğinde ise bildirim gelmeli.
    Benim sıkıntım öğeyi denetle kısmındaki olayda.

    Öğeyi denetlediğimde kodlar şu şekilde,

    Tüm başlıkları kapsayan ana tablo " <tbody class="searchResultsRowClass"> "

    Tablo içindeki her başlık ise şu kodla başlıyor:

    <tr data-id="1008542667" class="searchResultsItem ">

    Tablodaki 2. ürün başlığı:
    <tr data-id="1097492535" class="searchResultsItem ">

    Yani tablo içerisinde yer alan her başlık data-id ve arkasından class searchresult item yer alıyor.

    Python ile xxxxx.com sitesinde yer alan başlıkları çekmek ve son başlık değiştiğinde bildirim almak istiyorum.

    Teşekkür ederim.
  • 06-05-2023, 09:21:52
    #2
    import requests
    from bs4 import BeautifulSoup
    import time
    
    url = 'https://www.siteurl.com' # istek gönderilecek site adresi
    last_id = '' # son başlık id'si
    
    while True:
      response = requests.get(url) # siteye istek gönderilir
     soup = BeautifulSoup(response.text, 'html.parser')
     titles = soup.find_all('tr', {'class': 'searchResultsItem'}) # başlıklar bulma
     current_id = titles[-1]['data-id'] # en son başlık id
    
    if last_id != current_id:
    # son başlık değişmişse bildirim
    print('Yeni başlık:', titles[-1].text.strip())
    last_id = current_id
    
    time.sleep(60) # istek gonderme suresidir
    gelen başlıkları metin belgesinde tutmak için ise ;

      with open('basliklar.txt', 'a', encoding='utf-8') as f:          
      f.write(titles[-1].text.strip() + '\n')
    "Son başlığı tutmak için > last_id değişkeni"
  • 06-05-2023, 11:46:56
    #3
    ifkadeveloper adlı üyeden alıntı: mesajı görüntüle
    import requests
    from bs4 import BeautifulSoup
    import time
    
    url = 'https://www.siteurl.com' # istek gönderilecek site adresi
    last_id = '' # son başlık id'si
    
    while True:
      response = requests.get(url) # siteye istek gönderilir
     soup = BeautifulSoup(response.text, 'html.parser')
     titles = soup.find_all('tr', {'class': 'searchResultsItem'}) # başlıklar bulma
     current_id = titles[-1]['data-id'] # en son başlık id
    
    if last_id != current_id:
    # son başlık değişmişse bildirim
    print('Yeni başlık:', titles[-1].text.strip())
    last_id = current_id
    
    time.sleep(60) # istek gonderme suresidir
    gelen başlıkları metin belgesinde tutmak için ise ;

      with open('basliklar.txt', 'a', encoding='utf-8') as f:          
      f.write(titles[-1].text.strip() + '\n')
    "Son başlığı tutmak için > last_id değişkeni"


    File "C:UsersUserPycharmProjectspythonProjectmain.p y", line 16
    print('Yeni başlık:', titles[-1].text.strip())
    ^
    IndentationError: expected an indented block after 'if' statement on line 14

    Process finished with exit code 1

    Bu hatayı verdi hocam.
  • 06-05-2023, 11:54:33
    #4
    hocam hata if ifadesi sonrasında bir girinti olmadığından kaynaklanıyor.

    bu kodların sayfadaki hali :
    https://dosya.co/sj1czztbqzj2/veri.py.html

    buda dosyanın virüs total taraması:
  • 06-05-2023, 23:03:33
    #5
    Arayış devam ediyor. Hata almaya devam ediyorum.
  • 06-05-2023, 23:45:52
    #6
    Tubaunl adlı üyeden alıntı: mesajı görüntüle
    Arayış devam ediyor. Hata almaya devam ediyorum.
    Web sitesini paylaşırsanız yardım edebilirim.
  • 07-05-2023, 05:21:50
    #7
    Siteyi gönderin yardımcı olayım hocam
  • 07-05-2023, 05:57:49
    #8
    Site adresini request ile çektiğimiz zaman javascript kodları karşımıza çıkıyor, bunları kodlar içinde çalıştırmaya çalıştırırsak bu sefer CloudFlare koruyucusu engelliyor.

    Selenium kullanılarak çözülebilir direk html.content alınamıyor malesef.