Çözüldü Python Selenium ekşi sözlük entry'nin son sayfasında programı kapattırma

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

deezwend

Decapat
Katılım
28 Haziran 2021
Mesajlar
279
Çözümler
4
Daha fazla  
Cinsiyet
Erkek
Merhabalar, Python Selenium'da, Ekşi Sözlük'e girip bir entry'deki bütün entryleri çektiren bir uygulama yazdım.
Fakat bir sıkıntım var. Program son entry sayfasına gelip oradaki entryleri de çektikten sonra programın kapanmasını istiyorum.
7-8 tane farklı method denedim yapmak için fakat nâfile. Yardımcı olabilirseniz çok sevinirim. Kodlarım aşağıda.


Python:
from selenium import webdriver
from selenium.webdriver.common.by import By as by
from selenium.webdriver.common.keys import Keys as keys
import time
import os
import sys
from tkinter.messagebox import showwarning,showinfo,askyesno
demet = ("e","h")
class EntryCek:

    def __init__(self,link):
        self.browser = webdriver.Chrome()
        self.link = link
        self.count2 = 0

    def bir_basliga_gir(self):
        self.browser.get(self.link)
        time.sleep(3)
        eksi_sozluk.entry_cekmeye_basla()

    def entry_cekmeye_basla(self):
        with open("entryler.txt","a",encoding="utf-8") as f:
            def entry_cek():
                entryler = self.browser.find_elements(by.CSS_SELECTOR, ".content")
                self.sayfa_sayisi = self.browser.find_element(by.CSS_SELECTOR,".last")
                count = 0
                self.sayfa = 0
                kontrol = True
                for i in entryler:
                    count += 1
                    self.count2 += 1
                    print(f"{self.count2}.entry çekildi.")
                    f.write(f"{self.count2}."+"\n"+i.text + "\n\n*************************************************************\n\n")
                while kontrol:
                    if count == 10:
                        self.sayfa += 1
                        count = 1
                        time.sleep(1.5)
                        self.browser.find_element(by.CLASS_NAME, "next").click()
                        time.sleep(3.5)
                        return entry_cek()
            entry_cek()

while True:
   
    entry_link = input("Ekşi sözlük entry linki gir: ")
    if not entry_link[0:23] == "https://eksisozluk.com/":
        showwarning(message="Sadece ekşi sözlük entry linkleri gir")
        showinfo(message="Eğer url başına 'https://' eklemediysen ekle.")
    else:
        eksi_sozluk = EntryCek(entry_link)
        eksi_sozluk.bir_basliga_gir()
        break
 
Son düzenleyen: Moderatör:
Çözüm
Esenlikler! Aynı işlemi BeautifulSoup kullanarak yapmanız durumunda daha efektif olacaktır:

Python:
import requests
from bs4 import BeautifulSoup   # pip install bs4

url = ""   # eksisozluk url'sinin bulunduğu alan, input alabilirsiniz.

html = requests.get(url, headers={'User-Agent': 'Mozilla/5.0 (Platform; Security; OS-or-CPU; Localization; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)'}).content
# .get() metoduna headers parametresini ekleyerek kullanıcı tanımladık.
soup = BeautifulSoup(html,"html.parser")

for entry in soup.find_all("div",{"class":"content"}):
  print(entry.text)   # nasıl print edeceğiniz size kalmış.

Eğer PyQt5 kullanarak araca bir UI eklemek isterseniz aşağıda yardımcı video bulunuyor:

Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.

Yukarıdaki kod içerisinde .get() metoduna tanımladığımız headers parametresini mutlaka ekleyiniz. Genellikle bu parametrenin gerekmemesine karşın EkşiSözlük üzerinde web scraping uygularken zorunlu bir parametre haline geliyor.

Herhangi bir soru veya sorunla karşılaşmanız durumunda lütfen bildirin. :)
Merhabalar, yanlış XPath kullanmam nedeniyle olmuyormuş. Gece çözebildim. BeautifulSoup'a bakmadım henüz fakat Selenium yanında öğrenirsem iyi olur diye de söylentiler duydum. Göz atacağım.

Esenlikler! Aynı işlemi BeautifulSoup kullanarak yapmanız durumunda daha efektif olacaktır:

Python:
import requests
from bs4 import BeautifulSoup   # pip install bs4

url = ""   # eksisozluk url'sinin bulunduğu alan, input alabilirsiniz.

html = requests.get(url, headers={'User-Agent': 'Mozilla/5.0 (Platform; Security; OS-or-CPU; Localization; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)'}).content
# .get() metoduna headers parametresini ekleyerek kullanıcı tanımladık.
soup = BeautifulSoup(html,"html.parser")

for entry in soup.find_all("div",{"class":"content"}):
  print(entry.text)   # nasıl print edeceğiniz size kalmış.

Eğer PyQt5 kullanarak araca bir UI eklemek isterseniz aşağıda yardımcı video bulunuyor:

Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.

Yukarıdaki kod içerisinde .get() metoduna tanımladığımız headers parametresini mutlaka ekleyiniz. Genellikle bu parametrenin gerekmemesine karşın EkşiSözlük üzerinde web scraping uygularken zorunlu bir parametre haline geliyor.

Herhangi bir soru veya sorunla karşılaşmanız durumunda lütfen bildirin. :)
Hocam bu arada Headers'i nasıl bulabilirim?
Esenlikler! Aynı işlemi BeautifulSoup kullanarak yapmanız durumunda daha efektif olacaktır:

Python:
import requests
from bs4 import BeautifulSoup   # pip install bs4

url = ""   # eksisozluk url'sinin bulunduğu alan, input alabilirsiniz.

html = requests.get(url, headers={'User-Agent': 'Mozilla/5.0 (Platform; Security; OS-or-CPU; Localization; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)'}).content
# .get() metoduna headers parametresini ekleyerek kullanıcı tanımladık.
soup = BeautifulSoup(html,"html.parser")

for entry in soup.find_all("div",{"class":"content"}):
  print(entry.text)   # nasıl print edeceğiniz size kalmış.

Eğer PyQt5 kullanarak araca bir UI eklemek isterseniz aşağıda yardımcı video bulunuyor:

Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.

Yukarıdaki kod içerisinde .get() metoduna tanımladığımız headers parametresini mutlaka ekleyiniz. Genellikle bu parametrenin gerekmemesine karşın EkşiSözlük üzerinde web scraping uygularken zorunlu bir parametre haline geliyor.

Herhangi bir soru veya sorunla karşılaşmanız durumunda lütfen bildirin. :)
 
Esenlikler! Aynı işlemi BeautifulSoup kullanarak yapmanız durumunda daha efektif olacaktır:

Python:
import requests
from bs4 import BeautifulSoup   # pip install bs4

url = ""   # eksisozluk url'sinin bulunduğu alan, input alabilirsiniz.

html = requests.get(url, headers={'User-Agent': 'Mozilla/5.0 (Platform; Security; OS-or-CPU; Localization; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)'}).content
# .get() metoduna headers parametresini ekleyerek kullanıcı tanımladık.
soup = BeautifulSoup(html,"html.parser")

for entry in soup.find_all("div",{"class":"content"}):
  print(entry.text)   # nasıl print edeceğiniz size kalmış.

Eğer PyQt5 kullanarak araca bir UI eklemek isterseniz aşağıda yardımcı video bulunuyor:

Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.

Yukarıdaki kod içerisinde .get() metoduna tanımladığımız headers parametresini mutlaka ekleyiniz. Genellikle bu parametrenin gerekmemesine karşın EkşiSözlük üzerinde web scraping uygularken zorunlu bir parametre haline geliyor.

Herhangi bir soru veya sorunla karşılaşmanız durumunda lütfen bildirin. :)
Merhabalar, yanlış XPath kullanmam nedeniyle olmuyormuş. Gece çözebildim. BeautifulSoup'a bakmadım henüz fakat Selenium yanında öğrenirsem iyi olur diye de söylentiler duydum. Göz atacağım.

Esenlikler! Aynı işlemi BeautifulSoup kullanarak yapmanız durumunda daha efektif olacaktır:

Python:
import requests
from bs4 import BeautifulSoup   # pip install bs4

url = ""   # eksisozluk url'sinin bulunduğu alan, input alabilirsiniz.

html = requests.get(url, headers={'User-Agent': 'Mozilla/5.0 (Platform; Security; OS-or-CPU; Localization; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)'}).content
# .get() metoduna headers parametresini ekleyerek kullanıcı tanımladık.
soup = BeautifulSoup(html,"html.parser")

for entry in soup.find_all("div",{"class":"content"}):
  print(entry.text)   # nasıl print edeceğiniz size kalmış.

Eğer PyQt5 kullanarak araca bir UI eklemek isterseniz aşağıda yardımcı video bulunuyor:

Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.

Yukarıdaki kod içerisinde .get() metoduna tanımladığımız headers parametresini mutlaka ekleyiniz. Genellikle bu parametrenin gerekmemesine karşın EkşiSözlük üzerinde web scraping uygularken zorunlu bir parametre haline geliyor.

Herhangi bir soru veya sorunla karşılaşmanız durumunda lütfen bildirin. :)
Hocam bu arada Headers'i nasıl bulabilirim?
 
Son düzenleme:
Çözüm

Geri
Yukarı