Разбор html файлов с переменным элементом - PullRequest
0 голосов
/ 27 января 2020

У меня есть проблема с моими скачанными html файлами для анализа в соответствующем формате. В div DIV id = article_participants class = "content_part hid" указаны имена руководителей (например, как показано ниже: Дрор Бен Ашер, Ори Шило и Гай Гольдберг). настройки div и html одинаковы.

<DIV id=article_participants class="content_part hid">
<P>Redhill Biopharma Ltd. (NASDAQ:<A title="" href="http://seekingalpha.com/symbol/rdhl" symbolSlug="RDHL">RDHL</A>)</P>
<P>Q4 2014 <SPAN class=transcript-search-span style="BACKGROUND-COLOR: yellow">Earnings</SPAN> Conference <SPAN class=transcript-search-span style="BACKGROUND-COLOR: #f38686">Call</SPAN></P>
<P>February 26, 2015 9:00 AM ET</P>
<P><STRONG>Executives</STRONG></P> 
<P>Dror Ben Asher - CEO</P>
<P>Ori Shilo - Deputy CEO, Finance and Operations</P>
<P>Guy Goldberg - Chief Business Officer</P>
<P><STRONG>Analysts</STRONG></P>
<p>Scott Henry - Roth Capital</p>
</div>

Позже в html (в DIV id = article_qanda class = "content_part hid") руководители отвечают на вопросы. Эти ответы (должны быть распознаны <P><STRONG><SPAN class=answer>Ori Shilo</SPAN></STRONG></P>

В Dropbox я поделился примером одного из загруженных мной htmls: https://www.dropbox.com/s/uka24w7o5006ole/transcript-86-855.html?dl=0

То, что я должен сделать, это следующее (для всех моих файлов в каталоге в одном файле CSV): Руководители /// Ответы /// заголовок html

Мой код до сих пор только для одного руководителя:

import textwrap
import os
from bs4 import BeautifulSoup

directory ='C:/Research syntheses - Meta analysis/SeekingAlpha/'
for filename in os.listdir(directory):
    if filename.endswith('.html'):
        fname = os.path.join(directory,filename)
        with open(fname, 'r') as f:
            soup = BeautifulSoup(f.read(),'html.parser')

print('{:<30} {:<70}'.format('Name', 'Answer'))
print('-' * 101)
def find_executive(soup, executive):
    for answer in soup.select(f'p:contains("Question-and-Answer Session") ~ strong:contains({executive}) + p'):
    txt = answer.get_text(strip=True) 
    s = answer.find_next_sibling()
    while s:
        if s.name == 'strong' or s.find('strong'):
            break
        if s.name == 'p':
            txt += ' ' + s.get_text(strip=True)
        s = s.find_next_sibling()

    txt = ('\n' + ' '*31).join(textwrap.wrap(txt))

    print('{:<30} {:<70}'.format(func, txt), file=open("output.txt", "a"))

Может ли кто-нибудь помочь мне в решении этой проблемы?

Ответы [ 2 ]

0 голосов
/ 27 января 2020

@ abhilb Но это только дает результаты div # article_participants. Мне нужны руководители, упомянутые в выходных данных, которые вы предоставили и использовали в качестве элементов поиска в части файла html (DIV id = article_qanda class = "content_part hid"), а затем ответы, которые они дали.

['Banco Latinoamericano de Comercio Exterior, S.A (NYSE:BLX)', 'Q2 2014 Earnings Call', 'July 24, 2014 11:00 am ET', 'Executives', 'Rubens V. Amaral - Chief Executive Officer, President and Director', 'Christopher Schech - Chief Financial Officer and Executive Vice President of Finance ', 'Analysts', 'Yuri R. Fernandes - JP Morgan Chase & Co, Research Division']
['Redhill Biopharma Ltd. (NASDAQ:RDHL)', 'Q4 2014 Earnings Conference Call', 'February 26, 2015 9:00 AM ET', 'Executives', 'Dror Ben Asher - CEO', 'Ori Shilo - Deputy CEO, Finance and Operations', 'Guy Goldberg - Chief Business Officer', 'Analysts', 'Scott Henry - Roth Capital', 'Vernon Bernardino - MLV', 'Ramakanth Swayampakula - H.C. Wainwright']
0 голосов
/ 27 января 2020

Вы можете попробовать следующее:

В приведенном ниже коде замените 'html_folder' на html files folder path

from pathlib import Path
from bs4 import BeautifulSoup as bs

def get_names(fname):
    with open(fname, 'r') as f:
        soup = bs(f.read())
        names = soup.select('div#article_participants > p')
        return [x.text for x in names]
    return []

html_files = list(map(str, Path('html_folder').rglob('*.html')))
for f in html_files:
    print(get_names(f))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...