Очистка веб-страницы и связанной последующей страницы с помощью R или Python - PullRequest
1 голос
/ 08 апреля 2020

Я хочу сделать несколько НЛП на тексты песен, чтобы классифицировать настроение по десятилетиям. Теперь, учитывая заданную страницу текста для определенного исполнителя c, такого как The Smiths, у меня есть верхняя страница, отображающая все названия песен:

https://www.azlyrics.com/s/smiths.html

Катушка вокруг фонтана \ n

Вы получили все сейчас \ n

.....

Где каждый заголовок является ссылкой на реальную страницу лирики

https://www.azlyrics.com/lyrics/smiths/reelaroundthefountain.html https://www.azlyrics.com/lyrics/smiths/youvegoteverythingnow.html

Теперь, как бы go о срыве всех текстов с https://www.azlyrics.com/lyrics/smiths/XXX.html где XXX - заголовок на первой странице https://www.azlyrics.com/s/smiths.html.

Благодарен за любую помощь! И, как я написал, R или Python. Не имеет значения Желательно, чтобы каждая лирика сохранялась в отдельных * .txt файлах.

Я пробовал это:

    from bs4 import BeautifulSoup
import requests
list =[title1, title2, .....]
for x in list:
    url= "https://www.azlyrics.com/lyrics/smiths?x".format(str)
    r=requests.get(url)
    soup= BeautifulSoup(r.text)

    for span in soup.findAll('span', attrs={'class': 'views-field views-field-created'}) :
        print r.get_text()

Но не получилось. Это работает, если последующие страницы нумеруются.

Ответы [ 2 ]

1 голос
/ 08 апреля 2020
import requests
from bs4 import BeautifulSoup

# GET request to scrape the page for lyric links
r = requests.get('https://www.azlyrics.com/s/smiths.html')
# create soup
soup = BeautifulSoup(r.text, 'lxml')
# base url
url = 'https://www.azlyrics.com/'
# list comprehension to get all the links to the song lyrics
album_list = [url+a['href'].strip('..') for a in soup.find(id='listAlbum').findAll('a', href=True)]

for song in album_list:
    # do stuff with song
    # resp = requests.get(song)
    # song_soup = BeautifulSoup(resp.text, 'lxml')
    # etc.
0 голосов
/ 08 апреля 2020

В R мы можем использовать rvest.

Сначала мы получаем все ссылки на тексты песен.

library(rvest)

url <- "https://www.azlyrics.com/s/smiths.html"
all_links <- url %>%
              read_html() %>%
              html_nodes('div.listalbum-item a') %>%
              html_attr('href') %>%
         {paste0('https://www.azlyrics.com/', sub('../', '', ., fixed = TRUE))}

Затем получите текст с каждой страницы в all_links.

all_lyrics <- purrr::map(all_links, ~.x %>%read_html() %>% html_nodes('div') %>% .[[20]] %>% html_text())
...