Получение подмножества href's от findall () в BeautifulSoup

Моя цель – написать скрипт python, который принимает имя исполнителя как строковый ввод, а затем добавляет его к базовому URL-адресу, который отправляется в поисковый запрос genius. Затем он извлекает все тексты из ссылок возвращенной веб-страницы (что является необходимым подмножеством этой проблемы, которая также будет содержать имя исполнителя в каждой ссылке в этом подмножестве.) Я нахожусь в начальной фазе прямо сейчас и просто смог получить все ссылки с веб-страницы, включая те, которые мне не нужны в моем подмножестве. Я попытался найти простое решение, но не смог.

import requests # The Requests library. from bs4 import BeautifulSoup from lxml import html user_input = input("Enter Artist Name = ").replace(" ","+") base_url = "https://genius.com/search?q="+user_input header = {'User-Agent':''} response = requests.get(base_url, headers=header) soup = BeautifulSoup(response.content, "lxml") for link in soup.find_all('a',href=True): print (link['href']) 

Это возвращает этот полный список, в то время как мне нужны только те, которые заканчиваются лирикой и именем художника (здесь, например, Drake). Это будут ссылки, откуда я смогу получить лирику.

 https://genius.com/ /signup /login https://www.facebook.com/geniusdotcom/ https://twitter.com/Genius https://www.instagram.com/genius/ https://www.youtube.com/user/RapGeniusVideo https://genius.com/new https://genius.com/Drake-hotline-bling-lyrics https://genius.com/Drake-one-dance-lyrics https://genius.com/Drake-hold-on-were-going-home-lyrics https://genius.com/Drake-know-yourself-lyrics https://genius.com/Drake-back-to-back-lyrics https://genius.com/Drake-all-me-lyrics https://genius.com/Drake-0-to-100-the-catch-up-lyrics https://genius.com/Drake-started-from-the-bottom-lyrics https://genius.com/Drake-from-time-lyrics https://genius.com/Drake-the-motto-lyrics /search?page=2&q=drake /search?page=3&q=drake /search?page=4&q=drake /search?page=5&q=drake /search?page=6&q=drake /search?page=7&q=drake /search?page=8&q=drake /search?page=9&q=drake /search?page=672&q=drake /search?page=673&q=drake /search?page=2&q=drake /embed_guide /verified-artists /contributor_guidelines /about /static/press mailto:brands@genius.com https://eventspace.genius.com/ /static/privacy_policy /jobs /developers /static/terms /static/copyright /feedback/new https://genius.com/Genius-how-genius-works-annotated https://genius.com/Genius-how-genius-works-annotated - https://genius.com/ /signup /login https://www.facebook.com/geniusdotcom/ https://twitter.com/Genius https://www.instagram.com/genius/ https://www.youtube.com/user/RapGeniusVideo https://genius.com/new https://genius.com/Drake-hotline-bling-lyrics https://genius.com/Drake-one-dance-lyrics https://genius.com/Drake-hold-on-were-going-home-lyrics https://genius.com/Drake-know-yourself-lyrics https://genius.com/Drake-back-to-back-lyrics https://genius.com/Drake-all-me-lyrics https://genius.com/Drake-0-to-100-the-catch-up-lyrics https://genius.com/Drake-started-from-the-bottom-lyrics https://genius.com/Drake-from-time-lyrics https://genius.com/Drake-the-motto-lyrics /search?page=2&q=drake /search?page=3&q=drake /search?page=4&q=drake /search?page=5&q=drake /search?page=6&q=drake /search?page=7&q=drake /search?page=8&q=drake /search?page=9&q=drake /search?page=672&q=drake /search?page=673&q=drake /search?page=2&q=drake /embed_guide /verified-artists /contributor_guidelines /about /static/press mailto:brands@genius.com https://eventspace.genius.com/ /static/privacy_policy /jobs /developers /static/terms /static/copyright /feedback/new https://genius.com/Genius-how-genius-works-annotated https://genius.com/Genius-how-genius-works-annotated 

Следующим шагом будет использование селена для эмулирования прокрутки, которое в случае genius.com дает весь набор результатов поиска. Любые предложения или ресурсы будут оценены. Мне также хотелось бы получить несколько комментариев о том, как я хочу продолжить это решение. Можем ли мы сделать его более общим?

PS Я, возможно, не хорошо объяснил свою проблему, но я старался изо всех сил. Кроме того, любые двусмысленности приветствуются. Я новичок в соскабливании, питоне и программировании, так что просто хотел убедиться, что я следую правильному пути.

One Solution collect form web for “Получение подмножества href's от findall () в BeautifulSoup”

Используйте модуль регулярных выражений, чтобы соответствовать только ссылкам, которые вы хотите.

 import requests # The Requests library. from bs4 import BeautifulSoup from lxml import html from re import compile user_input = input("Enter Artist Name = ").replace(" ","+") base_url = "https://genius.com/search?q="+user_input header = {'User-Agent':''} response = requests.get(base_url, headers=header) soup = BeautifulSoup(response.content, "lxml") pattern = re.compile("[\S]+-lyrics$") for link in soup.find_all('a',href=True): if pattern.match(link['href']): print (link['href']) 

Вывод:

 https://genius.com/Drake-hotline-bling-lyrics https://genius.com/Drake-one-dance-lyrics https://genius.com/Drake-hold-on-were-going-home-lyrics https://genius.com/Drake-know-yourself-lyrics https://genius.com/Drake-back-to-back-lyrics https://genius.com/Drake-all-me-lyrics https://genius.com/Drake-0-to-100-the-catch-up-lyrics https://genius.com/Drake-started-from-the-bottom-lyrics https://genius.com/Drake-from-time-lyrics https://genius.com/Drake-the-motto-lyrics 

Это просто выглядит, если ваша ссылка соответствует шаблону, заканчивающемуся в -lyrics . Вы можете использовать аналогичную логику для фильтрации с использованием переменной user_input .

Надеюсь это поможет.

  • Python mulitprocessing queue не удерживает всех занятых
  • Scrapy и Selenium представляют форму, которая динамически отображается
  • Как получить URL-адрес неудачных попыток?
  • Создание скриптов Python на MAMP
  • Необходимо очистить информацию с веб-страницы с помощью кнопки «показать больше», каких-либо рекомендаций?
  • Должно ли мое веб-приложение python использовать unicode для всех строк?
  • Вход в веб-сайт с помощью веб-скребок в Python
  • Как безопасно хранить криптовый ключ?
  •  
    Interesting Posts for Van-Lav

    Python – алгоритм находит временные интервалы

    Ошибка Python: TypeError: объект 'module' не может быть вызван для кода HeadFirst Python

    Запуск определенных тестов Django (с django-носом?)

    Переопределение начального значения в ModelForm

    Нельзя ссылаться на таблицу стилей CSS в шаблоне, загружаемом python

    автоматически активировать virtualenv в окне терминала PyCharm

    Определите среднее значение «данных», где максимальное число CONTINUOUS cond = True

    Убийство дочернего процесса, когда родительский сбой в python

    Язык запросов для объектов python

    «OSError: Операция не разрешена» при установке Scrapy в OSX 10.11 (El Capitan) (защита целостности системы)

    Получить значение слайдера wxpython под щелчком мыши

    Переопределить serializer.data в Django REST Framework

    булевское индексирование, которое может привести к представлению большого массива данных панд?

    добавить столбец с постоянным значением в pandas dataframe

    Работа с кодированными в Unicode строками из Active Directory через python-ldap

    Python - лучший язык программирования в мире.