Python XPath boş sonuç veriyor

FazliBasturk

Hectopat
Katılım
10 Haziran 2020
Mesajlar
805
Çözümler
7
Daha fazla  
Cinsiyet
Erkek
Python XPath'te bir siteye girip oradan belli kısmı almaya çalışıyorum. Bir sürü site gezdim, öğrenmeye çalıştım fakat başaramadım. Sürekli [ ] sonucunu veriyor.

[CODE lang="python" title="Kod:"]import requests
from lxml import html

pageContent = requests.get("https://www.google.com/search?q=istanbul+iftar+vakti&gl=TR")
tree = html.fromstring(pageContent.content)
saat = tree.xpath('//*[@id="rso"]/div[1]/div/div[1]/div/div[1]/div/div/div/div[2]/div[2]/div/table/tbody/tr[2]/td[5]')
print(saat)[/CODE]
Edit: Sanırım Google ile alakalı başka siteleri deneyince böyle bir sorun olmadı :)
 
Son düzenleme:
1619415851418.png
 
Sorun Google'ın GET isteğine verdiği yanıttan kaynaklanıyor. Sen o URL'ye bir GET request'i gönderdiğinde sitede açtığın versiyonundan farklı bir content gönderiyor. Yani sana gönderdiği cevapta iftar saatini çekmek için kullandığın o tablo direkt bulunmuyor. Dolayısıyla da xpath öyle bir tablo bulamadığı için sana boş bir liste döndürüyor.

Google'ın sana neden farklı bir yanıt gönderdiğini bilmiyorum ve dolayısıyla bunu çözmenin bir yolunu da bilmiyorum ama LastPlayer'ın da dediği gibi ya API kullanacaksın ya da bir siteden çekeceksin.
 
Önce Selenium Driverinı indirin. https://github.com/mozilla/geckodriver/releases/download/v0.29.1/geckodriver-v0.29.1-win64.zip

Py dosyasının olduğu klasöre atın.

Sonra CMD'de şu kodları sıra sıra çalıştırın. pip3 install selenium pip3 install selenium

Ondan sonra şu kodu yazabilirsiniz.

Python:
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
import time

options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
driver = webdriver.Firefox(executable_path="geckodriver.exe",options=options) 

driver.get("https://www.google.com/search?q=" + a + " akşam namazı")
bugün = datetime.datetime.today()
zaman = str(bugün.hour) + "." + str(bugün.minute)
kalan_dakika = 60 - int(bugün.minute)
iftar_zamani = driver.find_element_by_xpath("/html/body/div[7]/div/div[9]/div[1]/div/div[2]/div[2]/div/div/div[1]/div/div[1]/div/div[1]/div/div/div/div[2]/div[2]/div/table/tbody/tr[2]/td[5]/div")
dakika_iftar = int(iftar_zamani.text.replace(":", " ").split()[0]) * 60 + int(iftar_zamani.text.replace(":", " ").split()[1])
şu_an_iftar = int(zaman.replace(".", " ").split()[0]) * 60 + int(zaman.replace(".", " ").split()[1])
kalan = dakika_iftar - şu_an_iftar

mod = kalan%60
sj123 = (int(kalan) - mod) / 60
kalan_saat = str(sj123) + "." + str(mod)
ne_kadar_kaldı = "**" + kalan_saat.replace(".", " ").split()[0] + "** saat **" +kalan_saat.replace("."," ").split()[2] + "** dakika kaldı."

if float(kalan_saat.replace(".", " ").split()[0] + "." + kalan_saat.replace(".", " ").split()[2]) < 0:
      print("Ezan çoktan okundu")
else:
       ne_kadar_kaldı2 = ne_kadar_kaldı
       print("İftara" ne_kadar_kaldı2)

driver.quit
 
Son düzenleme:

Geri
Yukarı