Добавленный список со словарями имеет одинаковое значение. Красивые данные Soup - PullRequest
0 голосов
/ 01 апреля 2020

Я хочу получить данные с веб-сайта и создать из него список со словарями.

item = {"price": "", "price per gramm": ""}
list_of_sku = []


soup = BeautifulSoup(open("./FULL_data.html"), "html.parser")

for divs in soup.find_all('div', attrs={"class": "col-xs-6 col-sm-4"})[:2]:
    links = divs.find_all("tr")
    for row in links:
        # We get list of prices here
        item_text = row.find('td')
        if item_text:
            item["price"] = str(item_text.text)
            print(item["price"])
            list_of_sku.append(item)
    print(list_of_sku)

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

/PycharmProjects/MyFirstOne/WEBSCRAPPING/Work with Soup data.py" 

$125.70   [{'price': '$125.70', 'price per gramm': ''}]  

$35.70  [{'price': '$35.70', 'price per gramm': ''}, {'price': '$35.70', 'price per gramm': ''}]

Process finished with exit code 0

Пожалуйста, помогите мне исправить это.

1 Ответ

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

Похоже, вы каждый раз модифицируете объект item и вставляете его заново. Попробуйте переместить первую строку в l oop:


list_of_sku = []

with open('./FULL_data.html', 'r') as f:
    data = f.read()

soup = BeautifulSoup(open("./FULL_data.html"), "html.parser")

for divs in soup.find_all('div', attrs={"class": "col-xs-6 col-sm-4"})[:2]:
    links = divs.find_all("tr")
    for row in links:
        # We get list of prices here
        item_text = row.find('td')
        if item_text:
            item = {"price": "", "price per gramm": ""}
            item["price"] = str(item_text.text)
            print(item["price"])
            list_of_sku.append(item)
    print(list_of_sku)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...