Selenium Resim çekme ve Sayfaları Dolaşma

Merhaba arkadaşlar ,

Python selenium kullanarak bot yapmaya çalışıyorum fakat 2 tane sorum var.

  1. Selenium ile sitedeki görselleri nasıl indirebilirim ya da nasıl linklerine ulaşabilirim ?
  2. Bir websitedeki bir kategoriden veri çekmeye çalışıyorum ilk sayfadaki tüm verileri çektikten sonra sonraki sayfaya gidemiyorum yani

Bu sayfadan veriyi çektim ardından linkteki sayıyı 1 arttırıp
s1

bu sayfaya gitmek istiyorum

https://www.webtekno.com/bilim-haberleri?s=3

sonra bu sayfadaki verileri çekmeye çalışıyorum.

For döngüsü kullanarak şöyle bir şeyler yapmaya çalıştım ama kodlar çalışmıyor

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()

basliklar = driver.find_elements_by_css_selector(".content-timeline--underline")

liste_haberler=[]

for i in range(0,5):

    link="https://www.webtekno.com/bilim-haberleri?s=" + str(i)

    driver.get(link)

    for baslik in basliklar:

        liste_haberler.append(baslik)

    driver.close()

Teşekkürler.

  • driver.close() for döngüsünün içinde olduğu için ilk linkten sonra driver kapatılıyor
  • liste_haberler.append(baslik) kısmında baslik bir WebElement nesnesi, eğer başlığın içerdiği yazıya erişmek istiyorsanız text niteliğini kullanmanız lazım. Siteyi değiştirdikten sonra da eski siteye ait elementleri kullanamazsınız.
  • basliklar listesini sadece bir defa oluşturuyorsunuz.
  • https://www.webtekno.com/bilim-haberleri?s=0 ile https://www.webtekno.com/bilim-haberleri?s=1 aynı sayfaya yönlendiriliyor.
from selenium import webdriver

from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()

liste_haberler=[]

for i in range(1,6):

    link="https://www.webtekno.com/bilim-haberleri?s=" + str(i)

    driver.get(link)

    basliklar = driver.find_elements_by_css_selector(".content-timeline--underline")

    for baslik in basliklar:

        liste_haberler.append(baslik.text)


driver.close()

1 Beğeni

Resimleri indirmeyi ve haber linklerini de ekledim. Aslında selenium elementler için screenshot metodu sağlıyor ama ne Firefox’da ne de Chrome’da düzgün çalışmadı. Sanırım webtekno sitesi ile alakalı. Bu yüzden resimleri requests ile indiriyorum.

from selenium import webdriver
from time import sleep
from selenium.webdriver.common.keys import Keys
import requests
import os

if not os.path.isdir("resimler"):
    os.mkdir("resimler")


def resmi_kaydet(link, dosya_ismi):
    response = requests.get(link)
    if response.status_code == 200:
        with open(dosya_ismi, 'wb') as f:
            f.write(response.content)
    response.close()

driver = webdriver.Chrome()

liste_haberler=[]
liste_linkler = []

resim_sayısı = 0

for i in range(1,6):

    link="https://www.webtekno.com/bilim-haberleri?s=" + str(i)

    driver.get(link)

    basliklar = driver.find_elements_by_css_selector(".content-timeline--right")

    for baslik in basliklar:

        liste_linkler.append(baslik.find_element_by_tag_name("a").get_attribute("href"))
        liste_haberler.append(baslik.find_element_by_css_selector(".content-timeline--underline").text)
        data = baslik.find_element_by_tag_name("img").get_attribute("data-original")
        resmi_kaydet(data, "resimler/resim"+str(resim_sayısı)+".png")
        resim_sayısı += 1

driver.close()
driver.quit()

1 Beğeni