#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 Просто отладьте, чтобы протестировать свой код, и не забудьте добавить заголовки для вашего запроса.