Интервал очистки с помощью rvest - PullRequest
0 голосов
/ 08 ноября 2019

Я хотел бы извлечь текст, содержащийся на сайте https://www.sec.gov/ix?doc=/Archives/edgar/data/918160/000091816018000065/form10-k2017.htm. Я смотрю мнение в заголовке финансовой отчетности, и мне нужно извлечь только один абзац, который содержит слово «сопровождающий консолидированный». Если есть совпадение, то он должен вернуть весь текст, который начинается с «Мы провели аудит .....». Я хотел вывести это в текстовый файл. Я пробовал разные варианты и не смог найти правильный код, чтобы получить этот текст. Может ли кто-нибудь помочь мне в решении этой проблемы?

Следующий код, который я использовал для извлечения информации. Но я получаю пустую строку.

library(rvest)

sample_url="https://www.sec.gov/ix?doc=/Archives/edgar/data/918160/000091816018000065/form10-k2017.htm"

cont<- read_html(sample_url)

output= gsub('\r\n',' ',html_nodes(cont_sree,'p') %>% html_text())

text=output[grepl("accompanying consolidated",output)]

1 Ответ

0 голосов
/ 08 ноября 2019

Если вы обновите страницу и воспользуетесь вкладкой сети, вы увидите альтернативный источник интересующего вас контента. Вы заметите, что он возвращает документ XBRL. Возможно, я бы подумал об использовании xpath, а не regex, для сопоставления с span, содержащим этот текст, и получения родительского элемента div;как это действительно представление на странице. Затем при извлечении текста проверьте, если NA.


R:

library(rvest)
library(magrittr)

node_text <- read_html('https://www.sec.gov/Archives/edgar/data/918160/000091816018000065/form10-k2017.htm')%>%
     html_node(xpath="//span[contains(text(), 'accompanying consolidated')]/parent::div")%>%
     html_text()
result <- ifelse(is.na(node_text),'not found',node_text)
result

Py (bs4 4.7.1+) :

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://www.sec.gov/Archives/edgar/data/918160/000091816018000065/form10-k2017.htm')
soup = bs(r.content,'lxml')
target = soup.select_one('div:has(span:contains("accompanying consolidated"))')
if target is None:
    print('Not found')
else:
    print(target.text)

Оба были проверены перед ответом.

Например (R):

enter image description here

py:

enter image description here

...