Получение текста из HTML с помощью Python - PullRequest
0 голосов
/ 05 января 2019

У меня есть данные HTML, и я хочу получить весь текст между тегами

и поместить его в кадры данных для дальнейшей обработки.

Но мне нужен только текст в тегах

, которые находятся между этими тегами:

            <div class="someclass" itemprop="text">
                    <p>some text</p>
            </div>

Используя BeautifulSoup, я могу легко получить текст между всеми тегами

. Но, как я уже сказал, я не хочу этого, если он не находится между этими тегами.

Ответы [ 3 ]

0 голосов
/ 05 января 2019

Если вам нужно решение для конкретной таблицы, я бы попробовал что-то вроде этого (ответ daveedwards лучше, если вы нет!):

import lxml
from bs4 import BeautifulSoup

innerHTML = browser.execute_script("return document.body.innerHTML")
soup = BeautifulSoup(str(innerHTML.encode('utf-8').strip()), 'lxml')

# Identify the table that will contain your <div> tags by its class
table = soup.find('table', attrs={'class':'class_name_of_table_here'})
table_body = table.find('tbody')
divs = table_body.find_all(['div'], attrs={'class':['someclass']})

for div in divs:
    try:
        selected_text = div.text
    except:
        pass

print(selected_text)
0 голосов
/ 05 января 2019

, если вы хотите выбрать p с родителем div и классом someclass, вы можете

html = '''<div class="someclass" itemprop="text">
            <p>some text</p>
            <span>not this text</span>   
          </div>
          <div class="someclass" itemprop="text">
            <div>not this text</div>   
          </div>
'''

soup = BeautifulSoup(html, 'html.parser')
p = soup.select_one('div.someclass p') # or select()
print(p.text)
# some text
0 голосов
/ 05 января 2019

Если вам нужен текст в тегах, которые связаны только с определенным классом, с BeautifulSoup вы можете указать эти конкретные классы с атрибутом attrs:

html = '''<div class="someclass" itemprop="text">
                    <p>some text</p>
            </div>'''

from bs4 import BeautifulSoup

soup = BeautifulSoup(html, 'html.parser')

tags = soup.find_all('div', attrs={'class': 'someclass'})

for tag in tags:
    print(tag.text.strip())

Выход:

some text
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...