собрать статью при парсинге

robisho

Активный пользователь
Пользователь
Окт 19, 2020
151
26
28
Добрый день. Python3.8+win7, requests+BeautifulSoup
необходимо при парсинге собрать все текстовые составляющие в одну статью. страница имеет вид
HTML:
<article>Text
  <h2>text</h2>
  <p>text</p>
  <p><img src="pics.jpg"></p>
  <p>text
    <ul>
      <li>
        text
      </li>
        text
      <li>
        text
      </li>
    </ul>
  </p>
</article>

нужно без привязки к тегу <article> собрать все тексты(и желательно img) у тега <p>, и хорошо было бы <h2> сюда же.
весь текст из р я выдергиваю
Python:
article_tags = soup.find_all('p')
article = ''
for tag in article_tags:
    try:
        article += ''.join(tag.text) + '\n'
    except Exception as e:
        continue

Н2 и картинки добавить в статью было бы идеально.
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Н2 и картинки добавить в статью было бы идеально.
Можно просто проверять есть ли в теге картинка:
Python:
header = soup.find('h2')
article_tags = soup.find_all('p')
article = header.text + '\n'
for tag in article_tags:
    if tag.find('img') is not None:
        article += str(tag.find('img')) + '\n'
    else:
        article += tag.text + '\n'
 
  • Мне нравится
Реакции: Student и robisho

robisho

Активный пользователь
Пользователь
Окт 19, 2020
151
26
28
спасибо за посказку, но вчера я немного неточно обрисовал исходные данные
HTML:
<article>Text
  <h2>text</h2>
  <p>text</p>
  <p><img src="pics.jpg"></p>
  <h2>text</h2>
  <p>text
    <ul>
      <li>
        text
      </li>
        text
      <li>
        text
      </li>
    </ul>
  </p>
  <h2>text</h2>
  <p>text</p>
</article>

дело в том, что <h2> встречается в статье несколько раз, это подзаголовок, он на одном уровне с <p>, поэтому в <article_tags> он не попадает, как не попадают и <ul> and <li>. с картинками получилось здорово, они как раз в теге <p>. сегодня весь день пробовал натянуть сову на глобус, пробовал привязаться к тегу h1.parent и перебрать в цикле next_siblings элементы, в этом случае всё на месте, h1+text+imgs+h2+ul+li, но таких версток очень мало попадается. может быть кто-нибудь понимающий поможет советом в который раз? спасибо.

т.е., чтобы быть точным, задача получить статью с text+imgs+h2+ul+li через привязку к тегам <p>. пробовал привязку к первому p.parent, но первый <p> далеко не всегда относится к статье.
 
Последнее редактирование:

Форум IT Специалистов