Очистка Глубоко вложенных HTML-тегов, Python

#python #web-scraping #beautifulsoup

Вопрос:

Я знаю, что есть похожие вопросы, но ни один из ответов не сработал для меня. Я пытаюсь получить ссылку src из тега img с классом «изображение мини-аватара пользовательского интерфейса», как вы можете видеть на изображении ниже: вложенные теги

Я не хотел проходить через 6 тегов div, чтобы добраться до него, но оба способа не сработали. Поиск возвращает NoneType. Это код, который я пытаюсь использовать:

 urls = df.iloc[:,-1].values  
for url in urls:
  soup = BeautifulSoup(url, 'lxml')
  a_tag = soup.find('a', class_ ='left')
  img = a_tag.find('img', class_= 'ui mini avatar image')
  link = img.get_attribute('src')
  print(link)
  break
 

Пожалуйста, обратите внимание, что я сохранил нужные мне ссылки в файле csv и использую Pandas для их чтения.
Вот первая ссылка, если вам нужно ее проверить: https://www.zomato.com/review/kMZEvAx

Ответ №1:

Используйте селектор css с select_one :

 from bs4 import BeautifulSoup
import requests

headers = {
    "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"
}


soup = BeautifulSoup(requests.get("https://www.zomato.com/review/kMZEvAx", headers=headers).text)
print(soup.select_one(".ui.mini.avatar.image").get("src"))
 

С принтами:

 'https://b.zmtcdn.com/images/placeholder_200.png'
 

  • Почему ваше решение не работает?

Ваш метод find вернет только первый <a> тег, который является классом left .

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

1. Я начинаю думать, что моя проблема заключается в чтении URL-адресов из csv. Панды не работали, поэтому я попробовал csv-считыватель и пытаюсь решить проблему.

2. @Яна. k Просто отладьте, чтобы протестировать свой код, и не забудьте добавить заголовки для вашего запроса.