Python BeautifulSoup'da istediğim HTML etiketine ulaşamıyorum

deezwend

Hectopat
Katılım
28 Haziran 2021
Mesajlar
294
Çözümler
4
Daha fazla  
Cinsiyet
Erkek
Merhaba. Dün BeautifulSoup kütüphanesini öğrenmeye başladım ve şu an ufak ufak şeyler deniyorum ve bir sorunum var. Wikipedia'dan "The Blitz" savaşıyla ilgili bir makaleden istediğim bir kısıma ulaşamıyorum.

1658322599024.png


Fotoğrafta gördüğünüz gibi Wikipedia'dan bu kısmı çekmeye çalışıyorum. HTML kodlarına gittiğimde ise;
1658322658601.png


Bu şekilde bunların herhangi bir filtreleme yapabileceğim bir classlara veya ID değerlerine sahip olmadıklarını görüyorum. Ben bunlara nasıl ulaşabilirim?

Kodlarım:
Python:
from bs4 import BeautifulSoup as bp
import requests as rq

html_text = rq.get("https://tr.wikipedia.org/wiki/The_Blitz")

soup = bp(html_text.content, "lxml")

yazi = soup.find_all('div')

print(yazi.p[3].text)
 
"XPath"(elemente sağ tık, Kopyala, XPath'i Kopyala) kullanarak örnekteki gibi ulaşabilirsin(sadece yazılara ulaşmak istiyorsan). XPath kullanmak için "lxml" paketini indirebilirsin(pip install lxml).

Python:
from bs4 import BeautifulSoup
from lxml import etree
import requests
 
 
URL = "https://tr.wikipedia.org/wiki/The_Blitz"
 
webpage = requests.get(URL)
soup = BeautifulSoup(webpage.content, "html.parser")
dom = etree.HTML(str(soup))

el = dom.xpath('//*[@id="mw-content-text"]/div[1]/p[4]//text()')
print(' '.join(el))
XPath'ten sonra "//text()" eklemeyi unutma sonuna. Yoksa "p" etiketi içinde farklı bir etiket kullanılıyorsa yazının tamamını çekmiyor.
 
"XPath"(elemente sağ tık, Kopyala, XPath'i Kopyala) kullanarak örnekteki gibi ulaşabilirsin(sadece yazılara ulaşmak istiyorsan). XPath kullanmak için "lxml" paketini indirebilirsin(pip install lxml).

Python:
from bs4 import BeautifulSoup
from lxml import etree
import requests
 
 
URL = "https://tr.wikipedia.org/wiki/The_Blitz"
 
webpage = requests.get(URL)
soup = BeautifulSoup(webpage.content, "html.parser")
dom = etree.HTML(str(soup))

el = dom.xpath('//*[@id="mw-content-text"]/div[1]/p[4]//text()')
print(' '.join(el))
XPath'ten sonra "//text()" eklemeyi unutma sonuna. Yoksa "p" etiketi içinde farklı bir etiket kullanılıyorsa yazının tamamını çekmiyor.
Merhabalar. Stackoverflow üzerinden böyle bir çözüm buldum:
Python:
from ast import Div
from bs4 import BeautifulSoup as bp
import requests as rq
from tkinter.messagebox import *

def TakeArc(path:str, theNumber:int, into=":") -> str:
    theArticle = rq.get(path)
    Soup = bp(theArticle.content, 'lxml')
    Divs = Soup.find("div", {"id":"mw-content-text"})
    P = Divs.find_all("p")

    if theNumber > len(P):
        showerror(message=f"You need to enter a number smaller than {len(P)}.")
        return None
    else:
        return P[theNumber].text


print(TakeArc("https://tr.wikipedia.org/wiki/Fransa_Muharebesi",2))

Bir etiket için ".find()" metotunu kullandıktan sonra o find yapılan etiket içerisinde de find yapılabiliyormuş.
 
Python:
import requests
from bs4 import BeautifulSoup

r = requests.get("https://tr.wikipedia.org/wiki/The_Blitz")
soup = BeautifulSoup(r.content,"lxml")
for i in soup.find_all("p"):
    print(i.text)
 

Technopat Haberler

Yeni konular

Geri
Yukarı