Очистка от Beautifulsoup в Python с циклом for просто возвращает последний результат - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь очистить данные с веб-страницы с помощью Beautifulsoup и (в конечном итоге) вывести их в CSV. В качестве первого шага я попытался получить текст соответствующей таблицы. Мне удалось это сделать, но код больше не выдает мне тот же вывод при повторном запуске: вместо того, чтобы возвращать все записи 12372 при запуске цикла for, он просто сохраняет последнюю.

Сокращенная версия моего кода:

from bs4 import BeautifulSoup
BirthsSoup = BeautifulSoup(browser.page_source, features="html.parser")
print(BirthsSoup.prettify()) 
# this confirms that the soup has captured the page as I want it to

birthsTable = BirthsSoup.select('#t2 td')
# selects all the elements in the table I want

birthsLen = len(birthsTable)
# birthsLen: 12372

for i in range(birthsLen):
    print(birthsTable[i].prettify())
# this confirms that the beautifulsoup tag object correctly captured all of the table

for i in range(birthsLen):
    birthsText = birthsTable[i].getText()
# this was supposed to compile the text for every element in the table

Но цикл for сохраняет текст только для последнего (т. Е. 12372-го) элемента в таблице. Нужно ли делать что-то еще для того, чтобы сохранить каждый элемент при прохождении цикла? Я думаю, что мой предыдущий (желательный) вывод имел текст каждого элемента в новой строке.

Я впервые использую python, поэтому извиняюсь за очевидную ошибку.

1 Ответ

6 голосов
/ 20 марта 2019

То, что вы делаете, перезаписывает вашу строку birthText каждую итерацию, поэтому к моменту ее окончания будет сохраняться только последняя.Чтобы решить эту проблему, создайте список и добавьте каждую строку:

birthsLen = len(birthsTable)
birthsText = []

for i in range(birthsLen):
    birthsText.append(birthsTable[i].getText())

Или, более кратко:

birthsText = [line.getText() for line in birthsTable]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...