Python beautifulsoup: удаление указанного элемента c в элементе - PullRequest
1 голос
/ 08 января 2020

У меня есть набор html файлов. Мне нужно удалить ссылки из сегмента "ul / li", но другие ссылки и сегменты "ul / li" должны остаться.

Я использую BS для этого.

<p>
  <a href="link" class="story body__link">link</a>
 </p>

<ul class="story-body__unordered-list">
  <li class="story-body__list-item">
    <a href="link" class="story-body__link">link</a>
  </li>
</ul>

<ul class="story-body__unordered-list">
  <li class="story-body__list-item">
    text
  </li>
</ul>

Я использую python BS для этой задачи. И мне удалось сделать эту задачу с помощью этого кода, но это не идеально. Мой вопрос, есть ли лучшее и более чистое решение для этого?

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


for i in soup.find_all('li', attrs={"story-body__list-item"}):
    x = str(i.next_element)
    if x.startswith( '<a' ) == True:
        i.decompose()

Ответы [ 2 ]

0 голосов
/ 08 января 2020

Попробуйте, как это, и посмотрите, работает ли он на вашем реальном коде:

for link in soup.select("li.story-body__list-item > a"):   
     link.parent.decompose()

Или, альтернативно:

for link.parent in soup.select("li.story-body__list-item > a"):    
     link.decompose()
0 голосов
/ 08 января 2020

Я думаю, что вы можете сделать это, получив ссылки благодаря названию их класса.

for i in soup.findAll("a", {"class": "story-body__link"}):
    ...

Вы также можете использовать списки: soup.find_all ("a", ["stylelistrowone", "stylelistrowtwo") ])

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