Urllib.request и BeautifulSoup

#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')