Python + BeautifulSoup: найти HTML-тег, в котором атрибут содержит соответствующий текстовый шаблон? - PullRequest
0 голосов
/ 16 ноября 2018

Я новичок в Python и BeautifulSoup.Я пытаюсь выяснить, как сопоставить только теги, которые являются <div> элементами, содержащими определенный образец текста, принадлежащий атрибуту.Например, все случаи, когда 'id' : 'testid' или везде 'class' : 'title'.

Это то, что у меня есть:

def cleanup(filename):
    fh = open(filename, "r")

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

    for div_tag in soup.find('div', {'class':'title'}):
        h2_tag = soup.h2_tag("h2")
        div_tag.div.replace_with(h2_tag)
        del div_tag['class']

    f = open("/tmp/filename.modified", "w")
    f.write(soup.prettify(formatter="html5"))
    f.close()

Как только я смогу сопоставить все эти конкретные элементы,в этот момент я могу понять, как управлять атрибутами (удалить класс, переименовать сам тег с <div> на <h1> и т. д.).Так что я знаю, что фактическая часть очистки, вероятно, не работает так, как в настоящее время.

Ответы [ 2 ]

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

.find(tagName, attributes) возврат одного элемента

.find_all(tagName, attributes) возврат нескольких элементов (списка)

больше вы можете найти в doc

для замены необходимо создать элемент .new_tag(tagName) и удалить атрибут del element.attrs[attributeName], см. ниже, например,

from bs4 import BeautifulSoup
import requests

html = '''
<div id="title" class="testTitle">
  heading h1
</div>
'''
soup = BeautifulSoup(html)

print 'html before'
print soup

div = soup.find('div', id="title")

#delete class attribute
del div.attrs['class']

print 'html after remove attibute'
print soup

# to replace, create h1 element
h1 = soup.new_tag("h1")
# set text from previous element
h1.string = div.text
# uncomment to set ID
# h1['id'] = div['id']
div.replace_with(h1)

print 'html after replace'
print soup
0 голосов
/ 16 ноября 2018

Кажется, это работает достаточно, но дайте мне знать, если есть "лучший" или "более стандартный" способ сделать это.

for tag in soup.findAll(attrs={'class':'title'}):
    del tag['class']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...