#python #web-scraping #beautifulsoup #python-requests
#python #веб-очистка #beautifulsoup #python-запросы
Вопрос:
В настоящее время я занимаюсь проектом веб-скрапинга текстов песен в качестве новичка, и я столкнулся с проблемой.
Я хочу, чтобы пользователь вводил первую букву имени исполнителя и полное имя исполнителя, но я не совсем уверен, как обращаться с косыми чертами в URL. Вот код:
from bs4 import beautifulSoup as bs
import requests
def main():
lyrics_getter()
def artist_input():
first_artist_name = input(
"Please enter the first letter of the artists name: ")
artist_name = input("Please enter the name of an artist: ")
if not artist_name.isalpha():
print("Please enter only alphabetical characters for the artist.")
else:
print(artist_name)
print("Compiling lyrics for: ", artist_name,
sep="")
def lyrics_getter():
artist_input()
website = requests.get('https://www.azlyrics.com/',
first_artist_name, '/', artist_name, '.html') # ERROR OCCURS HERE
if __name__ == '__main__':
main()
В lyrics_getter()
функции я пытаюсь использовать пользовательские входные данные из artist_input()
URL-адреса, но я получаю неожиданную ошибку аргумента.
Я думаю, что это в основном связано с тем, что я разделил URL, но я не совсем уверен, как это сделать. Вот пример того, чего я пытаюсь достичь:
https://www.azlyrics.com/j/jayz.html
Какие-нибудь советы?
Спасибо!
Комментарии:
1. Вместо
,
которого передается несколько аргументов дляrequests.get()
использования либодля объединения строки, либо us
os.path.join()
2.
'https://www.azlyrics.com/' first_artist_name '/' artist_name '.html'
Ответ №1:
Существует миллион способов сделать это, мой предпочтительный метод — поставить f перед строковым методом, так как он выглядит самым чистым для меня imo.
Поместите «f» перед строкой и используйте {}, чтобы поместить переменные прямо в строку.
website = requests.get(f'https://www.azlyrics.com/{first_artist_name}/{artist_name}.html')
Я надеюсь, что другой вариант поможет 🙂
Комментарии:
1. Спасибо! Безусловно, приятно иметь другие варианты.
Ответ №2:
В python вы можете использовать функцию format() .
‘https://www.azlyrics.com /{}/{}.html’.format(first_artist_name,имя_артиста)
Так что в идеале ваш код должен быть
website = requests.get('https://www.azlyrics.com/{}/{}.html'.format(first_artist_name,artist_name))
Ответ №3:
Я бы использовал f string
метод!
website = requests.get(f'https://www.azlyrics.com/{first_artist_name}/{artist_name}.html')