Python как добавить более одного ввода в URL-адрес requests.get

#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')