Güzel Çorba - Nesnelerin çeşitleri
Güzel bir grup kurucusuna bir html belgesi veya dizesi aktardığımızda, beautifulsoup temelde karmaşık bir html sayfasını farklı python nesnelerine dönüştürür. Aşağıda dört ana nesne türünü tartışacağız:
Tag
NavigableString
BeautifulSoup
Comments
Etiket Nesneleri
Çeşitli içerik türlerini tanımlamak için bir HTML etiketi kullanılır. BeautifulSoup'taki bir etiket nesnesi, gerçek sayfa veya belgedeki bir HTML veya XML etiketine karşılık gelir.
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<b class="boldest">TutorialsPoint</b>')
>>> tag = soup.html
>>> type(tag)
<class 'bs4.element.Tag'>
Etiketler birçok öznitelik ve yöntem içerir ve bir etiketin iki önemli özelliği adı ve öznitelikleridir.
İsim (tag.name)
Her etiket bir ad içerir ve sonek olarak '.name' üzerinden erişilebilir. tag.name, olduğu etiketin türünü döndürür.
>>> tag.name
'html'
Bununla birlikte, etiket adını değiştirirsek, aynısı BeautifulSoup tarafından oluşturulan HTML biçimlendirmesine yansıtılacaktır.
>>> tag.name = "Strong"
>>> tag
<Strong><body><b class="boldest">TutorialsPoint</b></body></Strong>
>>> tag.name
'Strong'
Öznitelikler (tag.attrs)
Bir etiket nesnesi herhangi bir sayıda niteliğe sahip olabilir. <B class = ”boldest”> etiketi, değeri “kalın” olan bir 'class' niteliğine sahiptir. Etiket OLMAYAN her şey temelde bir özniteliktir ve bir değer içermelidir. Özelliklere, anahtarlara erişerek (yukarıdaki örnekte "sınıf" a erişmek gibi) veya doğrudan ".attrs" aracılığıyla erişerek erişebilirsiniz.
>>> tutorialsP = BeautifulSoup("<div class='tutorialsP'></div>",'lxml')
>>> tag2 = tutorialsP.div
>>> tag2['class']
['tutorialsP']
Etiket özelliklerimizde her türlü değişikliği yapabiliriz (ekle / kaldır / değiştir).
>>> tag2['class'] = 'Online-Learning'
>>> tag2['style'] = '2007'
>>>
>>> tag2
<div class="Online-Learning" style="2007"></div>
>>> del tag2['style']
>>> tag2
<div class="Online-Learning"></div>
>>> del tag['class']
>>> tag
<b SecondAttribute="2">TutorialsPoint</b>
>>>
>>> del tag['SecondAttribute']
>>> tag
</b>
>>> tag2['class']
'Online-Learning'
>>> tag2['style']
KeyError: 'style'
Çok değerli öznitelikler
Bazı HTML5 özelliklerinin birden fazla değeri olabilir. En yaygın olarak kullanılan, birden çok CSS değerine sahip olabilen sınıf özelliğidir. Diğerleri 'rel', 'rev', 'başlıklar', 'erişim anahtarı' ve 'kabul-karakter kümesini' içerir. Güzel çorbadaki çok değerli özellikler liste halinde gösterilir.
>>> from bs4 import BeautifulSoup
>>>
>>> css_soup = BeautifulSoup('<p class="body"></p>')
>>> css_soup.p['class']
['body']
>>>
>>> css_soup = BeautifulSoup('<p class="body bold"></p>')
>>> css_soup.p['class']
['body', 'bold']
Bununla birlikte, herhangi bir öznitelik birden fazla değer içeriyorsa ancak HTML standardının herhangi bir sürümüne göre çok değerli öznitelikler değilse, güzel çorba, özniteliği tek başına bırakacaktır -
>>> id_soup = BeautifulSoup('<p id="body bold"></p>')
>>> id_soup.p['id']
'body bold'
>>> type(id_soup.p['id'])
<class 'str'>
Bir etiketi dizeye çevirirseniz birden çok öznitelik değerini birleştirebilirsiniz.
>>> rel_soup = BeautifulSoup("<p> tutorialspoint Main <a rel='Index'> Page</a></p>")
>>> rel_soup.a['rel']
['Index']
>>> rel_soup.a['rel'] = ['Index', ' Online Library, Its all Free']
>>> print(rel_soup.p)
<p> tutorialspoint Main <a rel="Index Online Library, Its all Free"> Page</a></p>
'Get_attribute_list' kullanarak, çok değerli olup olmadığına bakılmaksızın her zaman bir liste, dize olan bir değer elde edersiniz.
id_soup.p.get_attribute_list(‘id’)
Ancak, belgeyi 'xml' olarak ayrıştırırsanız, çok değerli öznitelikler yoktur -
>>> xml_soup = BeautifulSoup('<p class="body bold"></p>', 'xml')
>>> xml_soup.p['class']
'body bold'
NavigableString
Navigablestring nesnesi, bir etiketin içeriğini temsil etmek için kullanılır. İçeriğe erişmek için, etiketiyle ".string" kullanın.
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup("<h2 id='message'>Hello, Tutorialspoint!</h2>")
>>>
>>> soup.string
'Hello, Tutorialspoint!'
>>> type(soup.string)
>
Dizeyi başka bir dizeyle değiştirebilirsiniz, ancak mevcut dizeyi düzenleyemezsiniz.
>>> soup = BeautifulSoup("<h2 id='message'>Hello, Tutorialspoint!</h2>")
>>> soup.string.replace_with("Online Learning!")
'Hello, Tutorialspoint!'
>>> soup.string
'Online Learning!'
>>> soup
<html><body><h2 id="message">Online Learning!</h2></body></html>
Güzel çorba
BeautifulSoup, bir web kaynağını kazımaya çalıştığımızda oluşturulan nesnedir. Yani, kazımaya çalıştığımız tam belgedir. Çoğu zaman etiket nesnesi olarak ele alınır.
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup("<h2 id='message'>Hello, Tutorialspoint!</h2>")
>>> type(soup)
<class 'bs4.BeautifulSoup'>
>>> soup.name
'[document]'
Yorumlar
Yorum nesnesi, web belgesinin yorum bölümünü gösterir. Bu sadece özel bir NavigableString türüdür.
>>> soup = BeautifulSoup('<p><!-- Everything inside it is COMMENTS --></p>')
>>> comment = soup.p.string
>>> type(comment)
<class 'bs4.element.Comment'>
>>> type(comment)
<class 'bs4.element.Comment'>
>>> print(soup.p.prettify())
<p>
<!-- Everything inside it is COMMENTS -->
</p>
NavigableString Nesneleri
Navigablestring nesneleri, etiketlerin kendileri yerine etiketlerin içindeki metni temsil etmek için kullanılır.