id olmadan web kazıma

oy
0

Ben web kazıma hakkında yardıma ihtiyacım var. İşte html örneğidir:

<div class=content name=content-name>
   <h2 class=Topic>First Topic</h2>
   <ul>
      <li>This Data 1</li>
      <li>This Data 2</li>
      <li>This Data 3</li>
   </ul>
   <h2 class=Topic>Second Topic</h2>
   <ul>
      <li>That Data 1</li>
      <li>That Data 2</li>
      <li>That Data 3</li>
   </ul>
   <h2 class=Topic>Third Topic</h2>
   <ul>
      <li>Their Data 1</li>
      <li>Their Data 2</li>
      <li>Their Data 3</li>
   </ul>
</div>

BeautifulSoup kullanarak, name = content-name için html div etiketi alabilir. Ama nasıl ben birlikte tüm metin alabilirim li içine etiketiyle ul sonra h2 ikinci konu metin var etiketinin? Bütün bunları belirli sınıf, kimlik veya ada olmadan aynı div etiketinde olduğu için. Şimdiden teşekkürler.

Oluştur 20/10/2018 saat 14:06
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
1

from bs4 import BeautifulSoup

src = """
<div class="content" name="content-name">
    <h2 class="Topic">First Topic</h2>
    <ul>
        <li>This Data 1</li>
        <li>This Data 2</li>
        <li>This Data 3</li>
    </ul>
    <h2 class="Topic">Second Topic</h2>
    <ul>
        <li>That Data 1</li>
        <li>That Data 2</li>
        <li>That Data 3</li>
    </ul>
    <h2 class="Topic">Third Topic</h2>
    <ul>
        <li>Their Data 1</li>
        <li>Their Data 2</li>
        <li>Their Data 3</li>
    </ul>
</div>
"""

soup = BeautifulSoup(src, 'lxml')

content = soup.find_all("div", class_="content")[0]


second_topic = content.find_all("h2", class_="Topic", string="Second Topic")[0]

ul = second_topic.next_sibling.next_sibling

li = ul.find_all("li")
for i in li:
    print(i.string)
Cevap 20/10/2018 saat 14:20
kaynak kullanıcı

oy
1

etiketler kimlikleri veya sınıfları veya üst etiketlerini olmadığı zamanlarda her zaman daha zordur.

Sen kullanabilirsiniz find_previous_sibling

from bs4 import BeautifulSoup
html = """
<div class="content" name="content-name">
   <h2 class="Topic">First Topic</h2>
   <ul>
      <li>This Data 1</li>
      <li>This Data 2</li>
      <li>This Data 3</li>
   </ul>
   <h2 class="Topic">Second Topic</h2>
   <ul>
      <li>That Data 1</li>
      <li>That Data 2</li>
      <li>That Data 3</li>
   </ul>
   <h2 class="Topic">Third Topic</h2>
   <ul>
      <li>Their Data 1</li>
      <li>Their Data 2</li>
      <li>Their Data 3</li>
   </ul>
</div>
"""
soup = BeautifulSoup(html, 'html.parser')

for ul in soup.find_all('ul'):
    if ul.find_previous_sibling('h2').text == 'Second Topic':
        for li in ul.find_all('li'):
            print(li.text)

İade

That Data 1
That Data 2
That Data 3
Cevap 20/10/2018 saat 14:17
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more