Красивый Суп Джанго Парсинг - PullRequest
0 голосов
/ 22 марта 2019

Мне нужно получить данные / строку из XML-файла с описанием тега.У меня есть:

<description>&lt;img src="https://www.somepicture.jpeg" align="left" hspace="8" width="400" height="200" /&gt; DESCRIPTION TEXT I WANT TO PARSE </description>

Я использую BeautifoulSoup4 и Django, также ранее, я сделал новый суп, из которого я анализирую один элемент.Если я пытаюсь "item.description.text", я также получаю этот тег img.Как я могу избежать этого, и получить только желаемое описание?

Редактировать: необходимо сохранить этот проанализированный текст в базе данных.Как:

for item in items: 
  tagA = item.tagA.text
  tagB = item.tagB.text
  description = item.description.text  <--- here's parsed text that I need without img tag
  model = MyModel.objects.create(tag_a_field=tagA, tag_b_field=tagB, description_field=description)
  model.save()            

Спасибо

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Проблема в том, что часть img предназначена для текста.Это часть описания, и поэтому BeautifulSoup не анализирует его как HTML-тег.

Наивный подход для решения вашей проблемы - снова проанализировать этот текст:

html = '<description>&lt;img src="https://www.somepicture.jpeg" align="left" hspace="8" width="400" height="200" /&gt; DESCRIPTION TEXT I WANT TO PARSE </description>'
soup = BeautifulSoup(html)
description_soup = BeautifulSoup(soup.description.text)
description_soup.text
>>> ' DESCRIPTION TEXT I WANT TO PARSE '

ВВ вашем случае (согласно предоставленной информации) вы можете написать что-то вроде:

for item in items:
    tagA = item.tagA.text
    tagB = item.tagB.text
    description_soup = BeautifulSoup(item.description.text)
    description = description_soup.text
    MyModel.objects.create(tag_a_field=tagA, tag_b_field=tagB, description_field=description)
0 голосов
/ 22 марта 2019

Вы можете попробовать это:

from bs4 import BeautifulSoup
html_doc = '<description>&lt;img src="https://www.somepicture.jpeg" align="left" hspace="8" width="400" height="200" /&gt; DESCRIPTION TEXT I WANT TO PARSE </description>'
soup = BeautifulSoup(html_doc, 'html.parser')
inner_soup = BeautifulSoup(soup.description.text, 'html.parser')
print(inner_soup.img.next_sibling)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...