Python - проблемы с циклами for для создания фрейма данных с помощью BeautifulSoup scrape - PullRequest
0 голосов
/ 21 апреля 2020

Я новичок в Python и пытаюсь создать новый фрейм данных, используя BeautifulSoup для очистки веб-страницы. Я следую некоторому коду, который работал на другой странице, но здесь он не работает. Моя последняя таблица данных пуста, так что, похоже, она не добавляется. Любая помощь приветствуется. Вот что я сделал:

from bs4 import BeautifulSoup
import requests
import pandas as pd

allergens = requests.get(url = 'http://guetta.com/diginn/allergens/')
allergens = BeautifulSoup(allergens.content)

items = allergens.find_all('div', class_ = 'menu-item-card')

final_table = {}

for item in allergens.find_all('div', class_ = 'menu-item-card'):
    for row in item.find_all('h4', recursive = False)[0:]:
        for column in row.find_all('p', class_ = 'menu-item__allergens'):
            col_name = column['class'][0].split('__')[1]

            if col_name not in final_table:
                final_table[col_name] = []

            final_table[col_name].append(column.text)

df_allergens = pd.DataFrame(final_table)

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

Редактировать: Вот что должно быть на выходе:

Item Name     Allergens
Classic Dig | Soy
Item2       | allergen1, allergen2
Item3       | allergen2

1 Ответ

0 голосов
/ 21 апреля 2020

Вам не нужно находить все h4 теги в каждом элементе. Поэтому внесите изменения, как показано ниже:

...
for item in allergens.find_all('div', class_ = 'menu-item-card'):

    for column in item.find_all('p', class_ = 'menu-item__allergens'):
        col_name = column['class'][0].split('__')[1]

        if col_name not in final_table:
            final_table[col_name] = []

        final_table[col_name].append(column.text)
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...