import string
import requests
from bs4 import BeautifulSoup
song_name = input('enter song name : ')
url = 'https://search.azlyrics.com/search.php?q=' + (string.capwords(song_name)).replace(' ', '+')
res = requests.get(url)
soup = BeautifulSoup(res.text, 'html.parser')
for a in soup.find_all('a'):
href = a.get('href')
if href.find('https') != -1:
if href.find('lyrics/') != -1:
print(href)
res = requests.get(href)
break
Когда я передаю аргумент href в requests.get(href), он выдает ошибку. в то время как, когда я передаю постоянную строку, например, res = requests.get('https://google.co.in'), она не вызывает никаких ошибок.
Я проверил, что тип обеих переменных одинаков
print(type(href))
<class 'str'>
print(type('https://google.co.in'))
<class 'str'>
Оба они одного типа, тогда почему я получаю сообщение об ошибке.
Вход:введите название песни: план бога
Какое сообщение об ошибке отображается?
Также обратите внимание, что soup.find_all('a') собирает ссылку каждый на сайте, которая, вероятно, будет включать абсолютные пути для маршрутизации, что не будет работать с requests.get, поскольку имя сайта не указано.
@ Ajax1234 Спасибо, я нашел причину, по которой у меня появляется ошибка.
Приведенный ниже ответ от @ "Touch My Boom Boom" верен
@TylerCowan Я решил эту проблему, не добавляя http, https или www в начале базового URL.






Ваш href, вероятно, не является полностью определенным URL-адресом.
Вы можете проверить, начинается ли ваш href с «http» или «www».
Если нет, то, вероятно, это либо форма #foo, либо foo/bar.html, и в этом случае вы можете просто добавить его в конец URL-адреса текущей страницы.
Помогает кому-то на StackOverflow (Божий план начинает играть)
<a class = "btn btn-share" href = "?q=%22god%27s+Plan%22&w=songs&p=1"> Дополнительные результаты песни </a> есть в вашем списке, и когда я печатаю href над операторами if делает это до ошибки
вы должны учесть это в своей логике и добавить к базовому URL-адресу
я использую python3.5