#python #dictionary
#python #словарь
Вопрос:
В настоящее время я нахожусь в процессе создания веб-сканера с использованием requests
and BeautifulSoup
. Я использую цикл for для создания списка словарей со значениями, являющимися href
a
тегами. Однако у меня возникают проблемы с этим, поскольку все результаты будут последними href
на этой странице. Вот результат, когда я распечатываю конечный результат:
[{'link': '/terms'}, {'link': '/terms'}, {'link': '/terms'}, {'link': '/terms'}, {'link': '/terms'}, {'link': '/terms'}, {'link': '/terms'}, {'link': '/terms'}, {'link': '/terms'}, {'link': '/terms'}, {'link': '/terms'}, {'link': '/terms'}, {'link': '/terms'}, {'link': '/terms'}, {'link': '/terms'}, {'link': '/terms'}, {'link': '/terms'}]
Я не уверен, почему он выполняет только последнее значение. Я предполагаю, что это потому, что в последнем цикле он присваивает этому значению все ключи с одинаковым именем. Как я могу это исправить? Вот код.
import json
import requests
from bs4 import BeautifulSoup
tags_dict = {}
tags_list = []
r = requests.get("http://chicosadventures.com/")
soup = BeautifulSoup(r.content, "lxml")
for link in soup.find_all('a'):
tags_dict['link'] = link.get('href')
tags_list.append(tags_dict)
dump = json.dumps(tags_list)
print(dump)
Ответ №1:
Ваша проблема в tags_dict
том, что. Вы просто снова и снова сохраняете ссылку на этот словарь в своем списке, и, поскольку это ссылка, последнее значение отражается во всех записях. Я изменил его, чтобы создать новый объект dict для каждой итерации, теперь он работает нормально
import json
import requests
from bs4 import BeautifulSoup
tags_list = []
r = requests.get("http://chicosadventures.com/")
soup = BeautifulSoup(r.content, "lxml")
for link in soup.find_all('a'):
tags_list.append({"link": link.get('href')})
dump = json.dumps(tags_list)
print(dump)
Вывод:
[{«ссылка»: «/»}, {«ссылка»: «/about_chico»}, {«ссылка»: «/about_the_author»}, {«ссылка»: «/about_the_illustrator»}, {«ссылка»: «/chico_in_the_news_»}, { «ссылка»: «/order_your_copy»}, {«link»: «/contact_us»}, {«link»: «/about_chico»}, {«link»: «/about_the_author»}, {«link»: «/about_the_illustrator»}, {«link»: «/chico_in_the_news_»}, {«link»: «/order_your_copy»}, {«link»: «/contact_us»}, {«link»: «/privacy»}, {«link»: «javascript:print()»}, {«link»: «http://www.ebtech.net /«}, {«ссылка»: «/условия»}]