Список, в котором не отображаются значения, только название элемента

#python #python-requests-html

#питон #python-requests-html

Вопрос:

Я работаю над небольшим скриптом для извлечения потоков из TheTechGame.com и настройте его так, чтобы он добавлял информацию в список, но когда я перебираю этот список для отображения элементов в терминале, он просто отображает имена значений вместо заголовка или ссылки.

Код:

 from requests_html import HTMLSession

session = HTMLSession()
r = session.get("https://thetechgame.com/Forums/f=4/offtopic-discussion.html")

topic_title = r.html.find("a.topic-title")

topic_list = []

for topic_name in topic_title:
    topic_info = {
        'title': topic_name.text,
        'link': topic_name.absolute_links
    }
    topic_list.append(topic_info)

for items in topic_list:
    print(' '.join(items)) 
 

Выходной сигнал:

 title link
title link
...
title link
title link
 

Я бы хотел , чтобы заголовок темы отображался topic_name.text , а ссылка отображалась после этого topic_name.absolute_links .

Ответ №1:

Похоже, вам нужно получить доступ к значениям (вместо имен ключей, как это происходит в настоящее время в .join() функции). Что-то вроде этого даст вам результат, который звучит так, как вы ищете. Здесь вы будете перебирать каждый словарь в списке, а затем получать доступ к значениям с помощью title ключа и link ключа.

 for t in topic_list:
    print(t['title'], t['link']) 
 

Это даст вам следующий результат:

 TheTechGame Special Award Holders   Special Award Tutorials {'https://www.thetechgame.com/Forums/t=7462502/thetechgame-special-award-holders-special-award-tutorials.html'}
TTG All Time High Leaderboard {'https://www.thetechgame.com/Forums/t=7722177/ttg-all-time-high-leaderboard.html'}
...
 

Комментарии:

1. Похоже, это работает. Можно ли удалить {' '} часть вокруг ссылки? Спасибо за ответ, кстати!

2. Нет проблем! Вы могли бы сделать что-то вроде print(t['title'], t['link'].replace('{', '').replace('}', '') . Это просто заменит любой экземпляр этих символов ничем.

3. Спасибо за предложение, но оно выдает ошибку AttributeError: 'set' object has no attribute 'replace' . Я думал об использовании .strip() , но не знал, как заставить его работать для того, что я хочу сделать.

4. Ах, моя ошибка. Если вы сначала преобразуете ссылку в строку, а затем просто добавляете внутренние кавычки, она должна правильно форматировать вещи. str(t['link']).replace("{'", "").replace("'}", "")

5. Спасибо, чувак, теперь все работает так, как задумано. Хорошего дня!