Как удалить ссылки, кроме случаев, когда они имеют определенный контент - PullRequest
0 голосов
/ 14 декабря 2018

Я удаляю все ссылки в моем файле, но когда содержимое: «(VETADO)», я не люблю удалять.

Часть веб-страницы:

<a href="http://www.plan.com.br/ccivil_03.htm">(VETADO)</a>
<a href="http://www.plan.com.br/ccivil_04.htm">(Incluído em 2009).</a>

В этом случае я бы хотел сохранить содержимое первого a и удалить второе.

Это мой код:

for tag in soup.findAll():
    if tag.name in ['a', 'strike']:
      tag.decompose()

allp = soup.findAll('p')
for p in allp:
    nonBreakSpace = u'\xa0'
    result = p.text.replace('\n', '').replace(nonBreakSpace, '')  
    print(result)

Ожидаемый результат:

(VETADO)

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Вы можете сделать это за один раз с фильтром атрибута text и .decompose():

In [1]: from bs4 import BeautifulSoup

In [2]: data = """<div>
             <a href="http://www.plan.com.br/ccivil_03.htm">(VETADO)</a>
             <a href="http://www.plan.com.br/ccivil_04.htm">(Incluído em 2009).</a>
             </div>"""

In [3]: soup = BeautifulSoup(data, "html.parser")

In [4]: for a in soup.find_all("a", text=lambda text: text and "VETADO" in text):
             a.decompose()   

In [4]: soup.prettify()
<div>
 <a href="http://www.plan.com.br/ccivil_04.htm">
  (Incluído em 2009).
 </a>
</div>
0 голосов
/ 14 декабря 2018

Основываясь на предоставленном вами HTML, вы можете попробовать что-то вроде этого:

from bs4 import BeautifulSoup

htmlStr = """
            <a href="http://www.plan.com.br/ccivil_03.htm">(VETADO)</a>
            <a href="http://www.plan.com.br/ccivil_04.htm">(Incluído em 2009).</a>
          """
soup = BeautifulSoup(htmlStr, 'html.parser')

for i in range(len(soup.find_all('a'))):
    h = soup.find_all('a')[i].get_text()
    if('VETADO' in h):
        print(h)

Вывод:

(VETADO)

На данный момент вы знаете, какие индексы содержат VETADO иВы можете добавить необходимый материал в список, или в фрейм данных, или в переменную, или в любое другое место.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...