TypeError: unhashable тип: 'list' для проекта webscraping - PullRequest
1 голос
/ 05 мая 2019

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

Я использую Python 3.7.2. Работает на windows 10.

import requests
import bs4
import time
from bs4 import BeautifulSoup as Bsoup

url = "https://ebgames.com.au/search?q=Skyrim"
resp = requests.get(url)
soup = Bsoup(resp.text, 'html.parser')
platforms = soup.select(".product-top-level-group")
price = soup.select(".price")
names = soup.select(".product-title")
stripped_names = [na.text.strip() for na in names]
stripped_prices = [pri.text.strip() for pri in price]
stripped_platforms = [plat.text.strip() for plat in  platforms]




Game = {
    (stripped_names): {
        "Price": (stripped_prices),
        "Platform": [stripped_platforms]


    }
}

for Gamename, Gameinfo in Game.items():
    print(Gamename)
    print("Platform:", Gameinfo['Platform'])
    print("Price:", Gameinfo['Price'])
    print("\n")

Это моя ошибка:

"Platform": [stripped_platforms]
TypeError: unhashable type: 'list'

Ответы [ 2 ]

2 голосов
/ 05 мая 2019

Не знаю, откуда у вас этот синтаксис инициализации dict, но в Python это не так.

Вот хороший способ сделать это с zip:

stripped_names = ['Skyrim', 'Minecraft']
stripped_prices = ['$59.99', '$19.99']
stripped_platforms = ['PC', 'XBox One']

Game = {
    name: {
        "Price": price,
        "Platform": platform,
    } for name, price, platform in zip(
        stripped_names,
        stripped_prices,
        stripped_platforms,
    )
}

for Gamename, Gameinfo in Game.items():
    print(Gamename)
    print("Platform:", Gameinfo['Platform'])
    print("Price:", Gameinfo['Price'])
    print("\n")

Выход:

Skyrim
Platform: PC
Price: $59.99


Minecraft
Platform: XBox One
Price: $19.99
1 голос
/ 05 мая 2019

Проблема в том, что вы пытаетесь инициализировать dict с помощью ключа, который не является хэшируемым, здесь stripped_names (вы можете прочитать это , чтобы узнать больше о хэшируемых объектах). Вы можете превратить его в tuple, чтобы сделать его хэшируемым, или выбрать другую клавишу.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...