Из большой таблицы я хочу читать строки 5, 10, 15, 20 ... с помощью BeautifulSoup. Как мне это сделать? Является ли findNextSibling и приращивающим счетчиком путь?Получение n-го элемента с помощью BeautifulSoup
14
A
ответ
31
Вы также можете использовать findAll
, чтобы получить все строки в списке, и после этого просто использовать синтаксис ломтика для доступа к элементам, которые вам нужны:
rows = soup.findAll('tr')[4::5]
1
Как общее решение, вы можете конвертировать таблицу для вложенного списка и итерация ...
import BeautifulSoup
def listify(table):
"""Convert an html table to a nested list"""
result = []
rows = table.findAll('tr')
for row in rows:
result.append([])
cols = row.findAll('td')
for col in cols:
strings = [_string.encode('utf8') for _string in col.findAll(text=True)]
text = ''.join(strings)
result[-1].append(text)
return result
if __name__=="__main__":
"""Build a small table with one column and ten rows, then parse into a list"""
htstring = """<table> <tr> <td>foo1</td> </tr> <tr> <td>foo2</td> </tr> <tr> <td>foo3</td> </tr> <tr> <td>foo4</td> </tr> <tr> <td>foo5</td> </tr> <tr> <td>foo6</td> </tr> <tr> <td>foo7</td> </tr> <tr> <td>foo8</td> </tr> <tr> <td>foo9</td> </tr> <tr> <td>foo10</td> </tr></table>"""
soup = BeautifulSoup.BeautifulSoup(htstring)
for idx, ii in enumerate(listify(soup)):
if ((idx+1)%5>0):
continue
print ii
Бег что ...
[[email protected] ~]$ python testme.py
['foo5']
['foo10']
[[email protected] ~]$
1
Другой вариант, если вы предпочитаете сырой HTML ...
"""Build a small table with one column and ten rows, then parse it into a list"""
htstring = """<table> <tr> <td>foo1</td> </tr> <tr> <td>foo2</td> </tr> <tr> <td>foo3</td> </tr> <tr> <td>foo4</td> </tr> <tr> <td>foo5</td> </tr> <tr> <td>foo6</td> </tr> <tr> <td>foo7</td> </tr> <tr> <td>foo8</td> </tr> <tr> <td>foo9</td> </tr> <tr> <td>foo10</td> </tr></table>"""
result = [html_tr for idx, html_tr in enumerate(soup.findAll('tr')) \
if (idx+1)%5==0]
print result
Бег что ...
[[email protected] ~]$ python testme.py
[<tr> <td>foo5</td> </tr>, <tr> <td>foo10</td> </tr>]
[[email protected] ~]$
1
Это можно легко сделать с select
в красивой суп, если вы знаете, число строк, которые будут выбраны , (Примечание: Это находится в bs4)
row = 5
while true
element = soup.select('tr:nth-of-type('+ row +')')
if len(element) > 0:
# element is your desired row element, do what you want with it
row += 5
else:
break
Смежные вопросы
- 1. Получение следующего элемента UL с помощью BeautifulSoup
- 2. Получение текста из HTML с помощью BeautifulSoup
- 3. Вызов конкретного элемента «DIV» с помощью BeautifulSoup
- 4. получение электронной почты с помощью beautifulsoup
- 5. Получение метаданных из ссылок с помощью BeautifulSoup
- 6. Получение значения атрибута с помощью BeautifulSoup
- 7. Получение текста без тегов с помощью BeautifulSoup?
- 8. соскоб с помощью BeautifulSoup
- 9. Получение элемента с помощью HtmlAgilityPack
- 10. Получение конкретных данных с BeautifulSoup
- 11. Получение имен идентификаторов с BeautifulSoup
- 12. Python: Получение данных BeautifulSoup
- 13. В BeautifulSoup, Игнорировать дочерние элементы Хотя Получение родительского элемента данных
- 14. Изменение значения элемента с помощью BeautifulSoup возвращает пустой элемент
- 15. с помощью BeautifulSoup для вставки элемента перед закрытием тела
- 16. Получение чистого текста из текстовых/html-документов с помощью BeautifulSoup
- 17. Получение столбца из википедии таблицы с помощью BeautifulSoup
- 18. Получение стиль <tr> тега с помощью BeautifulSoup
- 19. Получение имен файлов, соответствующих расширению с помощью BeautifulSoup
- 20. Веб-соскабливание с помощью BeautifulSoup: получение данных о возврате средств
- 21. С Beautifulsoup, Извлечь теги элемента, кроме указанных
- 22. Получение размеров элемента с помощью SCSS?
- 23. Получение элемента внутри рамки с помощью jQuery
- 24. Получение элемента из DOM с помощью jQuery
- 25. Получение индекса элемента списка с помощью JQuery
- 26. Получение идентификатора элемента html с помощью jquery
- 27. Получение длины элемента с помощью php DOM
- 28. Получение элемента XML с помощью combobox
- 29. Получение .html() элемента с помощью JQuery
- 30. Получение высоты элемента опции с помощью javascript?
Это чисто. Обратите внимание, что метод find all возвращает массив, поэтому это здорово. – JasTonAChair