Есть ли способ получить HTML делений данного класса, которые обязательно должны быть смежными? - PullRequest
0 голосов
/ 30 марта 2020

Моя проблема в том, что в ситуации, подобной примеру ниже, мне нужно получить TEXT # 1 и TEXT # 2 в class = cls_003 и сохранить их как отдельные строки. В настоящее время я использую Python, BeautifulSoup и regex, чтобы открыть веб-страницу, и re.findall, чтобы получить необходимые div, а затем получить текст, используя BeautifulSoup. Есть ли лучший способ сделать это?

HTML страница, которую я пытаюсь очистить:

<div style="xxxx" class="cls_003"><span class="cls_003">----TEXT #1---</span></div>
<div style="xxxx" class="cls_003"><span class="cls_003">----TEXT #1---</span></div>

<div style="yyyy" class="cls_007"><span class="cls_007">----UNNECESSARY TEXT---</span></div>
<div style="yyyy" class="cls_007"><span class="cls_007">----UNNECESSARY TEXT---</span></div>class="cls_009">'r'End</span></div>

<div style="xxxx" class="cls_003"><span class="cls_003">----TEXT #2---</span></div>
<div style="xxxx" class="cls_003"><span class="cls_003">----TEXT #2---</span></div>
</div>class="cls_009">'r'End</span></div>

Python код, который у меня сейчас есть работает

soup_string = str(soup)

results = re.findall(r'(?m)<div style="xxxx" class="cls_003">.*?class="cls_009">'
                             r'End</span></div>', soup_string, flags=re.S)

soup2 = BeautifulSoup(results, features="lxml")
for result in results:
    result_parsed = soup2.findAll("div", {"class": "cls_003"})
    for q in result_parsed:
        print(q.text)
    print('\n')

1 Ответ

0 голосов
/ 30 марта 2020

Вам не нужно использовать регулярные выражения. вот мое решение:

from bs4 import BeautifulSoup

doc = '''<div style="xxxx" class="cls_003"><span class="cls_003">----TEXT #1---</span></div>
<div style="xxxx" class="cls_003"><span class="cls_003">----TEXT #1---</span></div>

<div style="yyyy" class="cls_007"><span class="cls_007">----UNNECESSARY TEXT---</span></div>
<div style="yyyy" class="cls_007"><span class="cls_007">----UNNECESSARY TEXT---</span></div>class="cls_009">'r'End</span></div>

<div style="xxxx" class="cls_003"><span class="cls_003">----TEXT #2---</span></div>
<div style="xxxx" class="cls_003"><span class="cls_003">----TEXT #2---</span></div>
</div>class="cls_009">'r'End</span></div>'''

soup = BeautifulSoup(doc, features="html.parser")
results = soup.findAll("div", {"class": "cls_003"})
resultsList = []
for result in results:
    resultsList.append(result.text)

print(f'Result set 1: {resultsList[0]+resultsList[1]}')
print(f'Result set 2: {resultsList[2]+resultsList[3]}')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...