Как извлечь таблицы из разных страниц?(Python) - PullRequest
1 голос
/ 25 сентября 2019

Я хочу извлечь таблицы первых страниц сервировки на http://

Таблицы были очищены с помощью приведенного ниже кода, и они находятся в списке, импортировать urllib из bs4, импортировать BeautifulSoup

base_url = "http://"
url_list = ["{}?page={}".format(base_url, str(page)) for page in range(1, 21)]

mega = []
for url in url_list:
    html = urllib.request.urlopen(url).read()
    soup = BeautifulSoup(html, 'html.parser')
    table = soup.find('table', {'class': 'table table-bordered table-striped table-hover'}) 
    mega.append(table)

Поскольку это список, и он не может использовать 'soup find_all' для извлечения элементов, которые я хочу, поэтому я преобразовал их в bs4.element.Tag для дальнейшего поиска элементов

for i in mega:
    trs = table.find_all('tr')[1:]
    rows = list()
    for tr in trs:
        rows.append([td.text.replace('\n', '').replace('\xa0', '').replace('\t', '').strip().rstrip() for td in tr.find_all('td')])
rows

Строки извлекают только таблицыПоследняя страница.В чем проблема моих кодов, так что предыдущие 19 таблиц не были извлечены?Спасибо!

Длина двух предметов не эквивалентна. Я использовал i в meaga для получения i.

len(mega) = 20
len(i) = 5

1 Ответ

0 голосов
/ 25 сентября 2019

Проблема довольно проста. В этом цикле for:

for i in mega:
    trs = table.find_all('tr')[1:]
    rows = list()
    for tr in trs:
        rows.append([td.text.replace('\n', '').replace('\xa0', '').replace('\t', '').strip().rstrip() for td in tr.find_all('td')])

Вы инициализируете rows = list() в цикле for.Таким образом, вы повторяете цикл 21 раз, но также очищаете список 20 раз.

Так что вам нужно это так:

rows = list()
for i in mega:
    trs = table.find_all('tr')[1:]
    for tr in trs:
        rows.append([td.text.replace('\n', '').replace('\xa0', '').replace('\t', '').strip().rstrip() for td in tr.find_all('td')])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...