#python #html #loops #dictionary #beautifulsoup
#python #HTML #циклы #словарь #beautifulsoup
Вопрос:
У меня есть словарь, в котором ключ и идентификатор imdb, а значение — год выпуска для указанного идентификатора imdb. например dictionary.key = 1898069 dictionary.value ="2017"
Моя проблема с приведенным ниже кодом заключается в том, что когда я print(x[foo_indexes[0]].split("(", 1)[0].strip())
его идеально очищаю, например, Netflix
но когда я пытаюсь добавить в список, например dist.append(x[foo_indexes[0]].split("(", 1)[0].strip())
, я получаю всю предварительную очистку HTML-кода, и каждое отображение копирует последнее.
Я делал это шаг за шагом, и проблема возникает на этапе печати / добавления. Может кто-нибудь указать на проблему? Спасибо.
dist = []
for imdb, ry in imdb_year.items():
url = "https://www.imdb.com/title/tt" imdb "/companycredits?ref_=tt_ql_dt_4"
html = urlopen(url)
soup = BeautifulSoup(html, "html.parser")
# soup.title.text
try:
dist = soup.find_all('ul', {'class':'simpleList'})
x = dist[1].text.split('n')
foo_indexes = [i for i, s in enumerate(x) if ry and "USA" in s]
dist.append(x[foo_indexes[0]].split("(", 1)[0].strip())
except:
dist.append('None')
Комментарии:
1. это немного сложно, потому что я не могу попробовать ваш код. Но что произойдет, если вы сделаете dist.append(str(x[foo …. ?
2. ты имеешь
dist = []
в виду, что нетdist=()
. Потомуtupe
что у него нет методаappend
3. Да, извините, это была опечатка !… также я пробовал str() безрезультатно. Очень странно, что при пошаговом выполнении это работает, прямо сейчас я выполняю цикл с помощью инструкции print, печатаю возврат в ячейку и собираюсь скопировать-вставить их в список. Скорее, если бы я мог просто добавить, хотя :/
4. Я понял .. у вас есть dist=[], а затем еще один dist с вашим html… Вы создаете свой полный html… Я могу опубликовать ответ, но вы должны заменить
dist2=[]
, аdist2.append
затем5. @Panda50 ты герой, спасибо тебе!
Ответ №1:
У вас есть один пустой список с именем dist
, и вы dist
снова используете его в результате поиска bs4…
Затем, когда вы захотите изменить свой результат, он добавится к dist из bs4!! Вот исправленный ответ:
dist2 = []
for imdb, ry in imdb_year.items():
url = "https://www.imdb.com/title/tt" imdb "/companycredits?ref_=tt_ql_dt_4"
html = urlopen(url)
soup = BeautifulSoup(html, "html.parser")
# soup.title.text
try:
dist = soup.find_all('ul', {'class':'simpleList'})
x = dist[1].text.split('n')
foo_indexes = [i for i, s in enumerate(x) if ry and "USA" in s]
dist2.append(x[foo_indexes[0]].split("(", 1)[0].strip())
except:
dist2.append('None')