Как я могу выбрать каждого n-го ребенка в BeautifulSoup? - PullRequest
0 голосов
/ 04 июля 2018

В моей таблице ниже я просмотрел пункты 1-4 и сохранил их в переменной, называемой заголовками.

Я также хотел бы выбрать значения 1-4 и сохранить их в переменной с именем столбцы, есть ли возможность выбирать каждую секунду. Что-то вроде

columns = boxinfo.find_all("td").nthChild(2)

Структура таблицы, которую я очищаю от

<div class="box1">

<table class="table1">

<tr><td class="label">Item1</td><td>Value1</td></tr>

<tr><td class="label">Item2</td><td>Value2</td></tr>

<tr><td class="label">Item3</td><td>Value3</td></tr>

<tr><td class="label">Item4</td><td>Value4</td></tr>

</table>

</div>

код

#Find our information
boxinfo = soup.find("div", {"id": "box1"})
headings = boxinfo.find_all("td", {"class": "label"})
columns = boxinfo.find_all("td").nthChild(2) #This does not work :(

1 Ответ

0 голосов
/ 04 июля 2018

Если вы пытаетесь извлечь все значения, то вы позволите BeautifulSoup вернуть все элементы, и Python сможет затем отфильтровать нужные значения. Например:

from bs4 import BeautifulSoup

html = """<div class="box1">
<table class="table1">
<tr><td class="label">Item1</td><td>Value1</td></tr>
<tr><td class="label">Item2</td><td>Value2</td></tr>
<tr><td class="label">Item3</td><td>Value3</td></tr>
<tr><td class="label">Item4</td><td>Value4</td></tr>
</table>
</div>"""

soup = BeautifulSoup(html, "html.parser")
div = soup.find("div", class_="box1")
values = []

for tr in div.find_all('tr'):
    values.append(tr.find_all("td")[1].text)

print(values)

Предоставление вам списка значений:

['Value1', 'Value2', 'Value3', 'Value4']

Или, если вы хотите список, содержащий все данные в виде столбцов:

soup = BeautifulSoup(html, "html.parser")
div = soup.find("div", class_="box1")
columns = []

for tr in div.find_all('tr'):
    columns.append([td.text for td in tr.find_all("td")])

columns = list(zip(*columns))    

print(columns)
print(columns[1])  # display the 2nd column

Даю вам:

[('Item1', 'Item2', 'Item3', 'Item4'), ('Value1', 'Value2', 'Value3', 'Value4')]
('Value1', 'Value2', 'Value3', 'Value4')

list(zip(*columns)) - это способ транспонирования списка строк в список столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...