Получить заголовок дочернего элемента bs4 элемента python с помощью findall?

#python #python-3.x #beautifulsoup

#python #python-3.x #beautifulsoup

Вопрос:

Я использую метод find_all, чтобы получить некоторые элементы следующим образом:

 elements = soup.find_all('a', {'class': "watchlink"})
  

чтобы получить элементы, подобные следующим:

 <a class="watchlink" href="https://www1.swatchseries.to/freecale.html?r=iexyJrjdCI6InRuT0tnVpFR1VjBVZUmNFZHJiN09tLWENDT25oOGNrS3c0SkkzTDRLSXBUK1VCUXlOd0NJNW1uWWJkWVUrRkluejciLCJpdiI6IjEyNjViZTg2NTU3NWVkN2ZlNDZiNWVjZTA5NjkxNDE2IiwicyI6IjBhZGYxOGNmY2ExMzA5YjEifQ==" onclick="$(this).css('color','#AE3939'); $(this).css('text-decoration','line-through');" rel="nofollow" style="cursor:pointer;" target="_blank" title="mixdrop.co">Watch<span> This</span> Link!</a>
  

Я не могу получить плитку только так:

     for x in elements:
        print(x['title'])
  

Я получаю эту ошибку:

 Traceback (most recent call last):
 File "C:/Users/CobraCommander/PycharmProjects/999/get_vidtodo_links.py", line 25, in <module>
  print(x['title'])
File "C:Python37libsite-packagesbs4element.py", line 1016, in __getitem__
  return self.attrs[key]
KeyError: 'title'
  

Однако это работает для других атрибутов, таких как, например, «href».

Как мне получить заголовок: «mixdrop.co » из моей стихии?

Ответ №1:

Просто убедитесь, что вы получаете доступ к правильным anchor тегам title , поскольку, как я полагаю, есть теги с тем же именем класса, но без title

 from bs4 import BeautifulSoup

html = '''<a class="watchlink" href="https://www1.swatchseries.to/freecale.html?r=iexyJrjdCI6InRuT0tnVpFR1VjBVZUmNFZHJiN09tLWENDT25oOGNrS3c0SkkzTDRLSXBUK1VCUXlOd0NJNW1uWWJkWVUrRkluejciLCJpdiI6IjEyNjViZTg2NTU3NWVkN2ZlNDZiNWVjZTA5NjkxNDE2IiwicyI6IjBhZGYxOGNmY2ExMzA5YjEifQ==" onclick="$(this).css('color','#AE3939'); $(this).css('text-decoration','line-through');" rel="nofollow" style="cursor:pointer;" target="_blank" title="mixdrop.co">Watch<span> This</span> Link!</a>'''


soup = BeautifulSoup(html, 'html.parser')

goal = [item['title'] for item in soup.findAll(
    "a", {'class': 'watchlink', 'title': True})]

print(goal)
  

Вывод:

 ['mixdrop.co']