как получить несколько символов после строки, чтобы можно было идентифицировать строку в теге head или элементе списка? - PullRequest
0 голосов
/ 29 ноября 2018

Я собрал все теги заголовков в данных, предоставленных heads=str(soup.find_all(re.compile('^h[1-6]$'))).Затем я собираю данные между тегами головы.Дана часть исходного кода.

import bs4
import re

data = '''
<html>
<body>
<div class="mob-icon"> <span></span></div>
<nav id="nav">
<ul class="" id="menu-home-welcome-banner">
<li class="menu-item menu-item-type-custom menu-item-object-custom current-menu-parent menu-item-has-children menu-item-1778" id="menu-item-1778"> <a class="submeny-top" href="http://www.uvionicstech.com" ontouchstart="">Home</a> </li>
<!--<li id="menu-item-1785" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1785"><a href="#about" class="scroll-to-link" ontouchstart="">About</a></li>-->
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1786" id="menu-item-1786"><a class="scroll-to-link" href="#data-analytics" ontouchstart="">PRODUCTS &amp; SOLUTIONS</a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1787" id="menu-item-1787"><a class="scroll-to-link" href="#artificial-intelligence" ontouchstart="">Artificial Intelligence</a></li>
<!-- <li id="menu-item-1788" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1788"><a href="#iot" class="scroll-to-link" ontouchstart="">IOT</a></li> -->
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1788" id="menu-item-1788"><a class="scroll-to-link" href="#services" ontouchstart="">All in One Place</a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1789" id="menu-item-1789"><a class="scroll-to-link" href="#eco-system" ontouchstart="">PARTNERS</a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1791" id="menu-item-1791"><a class="scroll-to-link" href="#contact" ontouchstart="">Contact</a></li>
<h3 class="h3 text-center">PARTNERS</h3>
<h3 class="vc_custom_heading titel-left wow" data-wow-delay="0.3s">
<span class="titel-line"></span>Artificial Intelligence                                  </h3>

<h3 class="vc_custom_heading titel-left wow " data-wow-delay="0.3s"><span class="titel-line">
</span>Everything for your Business, <small>all in one place</small>
</h3>

</ul>
</nav>
</div>

</body>
</html>
'''

searched_word = 'Artificial Intelligence'
soup = bs4.BeautifulSoup(data, 'html.parser')
results = soup.body.find_all(string=re.compile('.*{0}.*'.format(searched_word)), recursive=True)

output:

 results
['Artificial Intelligence',
 'Artificial Intelligence                                  ']

Здесь первый Artificial Intelligence является элементом списка, а второй Artificial Intelligence является тегом head.Я пытаюсь найти слово только с заголовком.Как получить слово только с заголовком?Есть ли способ найти следующие несколько символов, за которыми следует слово Artificial Intelligence.Так что он получит Artificial Intelligence </h3>.Тогда он не будет рассматривать элемент списка.

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

если в заголовках нет таких дочерних тегов, как

<h3 class="vc_custom_heading">Artificial Intelligence</h3>

, вы можете объединить свое регулярное выражение

results = soup.body.find_all(re.compile('^h[1-6]$'), 
                             string=re.compile(searched_word))

, но ваш h3 содержит дочерний тег, я создам цикл какпервый ответ или создание пользовательской функции для передачи find_all()

def head_contain_word(tag):
    return re.match(r'^h[1-6]$', tag.name) \
      and searched_word in tag.text

searched_word = 'Artificial Intelligence'
soup = bs4.BeautifulSoup(data, 'html.parser')
results = soup.body.find_all(head_contain_word)

результаты:

[<h3 class="vc_custom_heading titel-left wow" data-wow-delay="0.3s">
\n<span class="titel-line"></span>Artificial Intelligence                                  </h3>]
0 голосов
/ 29 ноября 2018

, так как вам нужен только заголовок тега, можем ли мы просто взять их и затем поискать по ним?

searched_word = 'Artificial Intelligence'

soup = bs4.BeautifulSoup(data, 'html.parser')
head_tags = soup.find_all('h3')


for ele in head_tags:
    if searched_word in ele.text:
        results = [ele.text.replace('\n', '')]
if results:
    print(results)
else:
    print('No matches found')

дал вывод:

In [184]: results
Out[184]: ['Artificial Intelligence                                  ']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...