Невозможно получить вывод как правильно отформатированный словарь - PullRequest
0 голосов
/ 24 апреля 2018

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

Это моя попытка:

import requests
from bs4 import BeautifulSoup

URL = "https://fantasy.premierleague.com/player-list/"

def get_data(link):
    res = requests.get(link,headers={"User-Agent":"Mozilla/5.0"})
    soup = BeautifulSoup(res.text,"lxml")
    data = []
    for content in soup.select("div.ism-container"):
        itmval = {}
        itmval['name'] = content.select_one("h2").text
        itmval['player_info'] = [[item.get_text(strip=True) for item in items.select("td")] for items in content.select(" table:nth-of-type(1) tr:nth-of-type(2)")]
        data.append(itmval)

    print(data)

if __name__ == '__main__':
    get_data(URL)

Вывод, который я имею:

[{'name': 'Goalkeepers', 'player_info': [['De Gea', 'Man Utd', '161', '£5.9']]}]

Вывод Iожидайте получить:

[{'name': 'Goalkeepers', 'player_info': ['De Gea', 'Man Utd', '161', '£5.9']}]

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

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

Если вы хотите использовать понимание вложенного списка, попробуйте заменить

[[item.get_text(strip=True) for item in items.select("td")] for items in content.select(" table:nth-of-type(1) tr:nth-of-type(2)")]

на

[item.get_text(strip=True) for items in content.select(" table:nth-of-type(1) tr:nth-of-type(2)") for item in items.select("td")]
0 голосов
/ 24 апреля 2018

player_info соответствует следующему выражению (немного упрощено):

player_info = [[item for item in items] for items in content]

content, кажется, имеет только один элемент.Вероятно, вам нужно что-то вроде:

 player_info = [item for item in content]

Если у контента более одного элемента, удалите вторую пару [ ... ] в первом блоке кода.

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