CSS селектор детей (невозможно выбрать всех детей) - PullRequest
1 голос
/ 07 февраля 2020

image

Это изображение того, что я пытаюсь очистить, используя красивый суп. Но всякий раз, когда я использую код, показанный ниже, я получаю доступ только к первому ребенку. Я никогда не смогу получить доступ ко всем детям. Может ли кто-нибудь помочь мне с этим?

item = soup.select("ul.items > li")
print(len(item))

Ответы [ 2 ]

0 голосов
/ 08 февраля 2020

Возможно, ваша версия неверна. Это нормально.

from bs4 import BeautifulSoup
html = '''
<ul class="items">
  <li>1</li>
  <li>2</li>
</ul>
'''
soup = BeautifulSoup(html,features="lxml")
item = soup.select('ul.items>li')
print (len(item))

Здесь есть другое решение

from simplified_scrapy.simplified_doc import SimplifiedDoc
html = '''
<ul class="items">
  <li>1</li>
  <li>2</li>
</ul>
'''
doc = SimplifiedDoc(html)
item = doc.selects('ul.items>li')
print(len(item))

Вот еще примеры здесь

0 голосов
/ 08 февраля 2020

Проблема может быть решена в 2 этапа следующим образом:

  1. Использование select_one on суп для получения ul
  2. Использование find_all on ul для извлечения всех li пунктов.

Рабочий раствор:

# File name: soup-demo.py

inputHTML = """
<ul class="items">
<li class="class1">item 1</li>
<li class="class1">item 3</li>
<li class="class1">item 3</li>
</ul>
"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(inputHTML, 'html.parser')
itemList = soup.select_one("ul", class_="items")

items = itemList.find_all("li")
print("Found ", len(items), " items")
for item in items:
    print(item)

Выход:

$ python3 soup-demo.py 
Found  3  items
<li class="class1">item 1</li>
<li class="class1">item 3</li>
<li class="class1">item 3</li>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...