Как удалить этот элемент html?

Я очищаю html этого url. В частности, я хочу удалить <input checked="" class="selectorOpernerBig" id="default" name="selectorOpernerBig" type="radio">. Его полный xpath равен /html/body/div/div[1]/div/input. Его структура

введите здесь описание изображения

Я пытался удалить с помощью

import requests
from bs4 import BeautifulSoup

url = 'https://www.collinsdictionary.com/dictionary/french-english/aimer'
headers = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0'}
soup = BeautifulSoup(requests.get(url, headers = headers).content, 'html.parser')
    
remove = soup.find_all('input', {'checked' : ''})  
for match in remove:
    match.decompose()    

entry_name = soup.h2.text
content = ''.join(map(str, soup.select_one('.res_cell_center').contents))

К сожалению, он удаляет все в <div class="page" == $0 и </div>. Не могли бы вы подробнее остановиться на этом вопросе и как решить проблему?


person Akira    schedule 27.07.2020    source источник


Ответы (2)


Вы можете сделать это с BeautifulSoup, чтобы:

from bs4 import BeautifulSoup


html = '''
<div class="page"><input type="radio" id="default" class="selectorOpernerBig" name="selectorOpernerBig" checked=""/><label for="default" class="shadow_layer"> </label><label for="default" class="menuPanelCloseButton icon-times icon-2x"> </label></div>
'''

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

remove = soup.find_all('input', {'checked': ''})
for r in remove:
    r.extract()

print(soup.prettify())

Отпечатки:

<div class="page">
 <label class="shadow_layer" for="default">
 </label>
 <label class="menuPanelCloseButton icon-times icon-2x" for="default">
 </label>
</div>

Если в скрипте уже есть BeautifulSoup, лучше продолжать использовать BeautifulSoup, а затем импортировать больше библиотек.

person UWTD TV    schedule 27.07.2020
comment
У меня похожие команды, например for match in soup.find_all('div', {'class' : 'example-info'}): и for match in soup.find_all('div', {'class' : 'share-overlay'}): . Можно ли их объединить в одну команду? - person Akira; 27.07.2020
comment
@LAD Я не могу ответить прямо в эфир по конкретному делу. Но я бы, вероятно, разделил их, чтобы упростить устранение любых проблем. - person UWTD TV; 27.07.2020

Другой метод.

from simplified_scrapy import SimplifiedDoc, utils, req
html = '''
<div class="page"><input type="radio" id="default" class="selectorOpernerBig" name="selectorOpernerBig" checked=""/><label for="default" class="shadow_layer"> </label><label for="default" class="menuPanelCloseButton icon-times icon-2x"> </label></div>
'''
doc = SimplifiedDoc(html)
remove = doc.select('input#default')
if remove: remove.repleaceSelf('')
print (doc.html)

Результат:

<div class="page"><label for="default" class="shadow_layer"> </label><label for="default" class="menuPanelCloseButton icon-times icon-2x"> </label></div>

Вот еще примеры: https://github.com/yiyedata/simplified-scrapy-demo/tree/master/doc_examples

person dabingsou    schedule 27.07.2020
comment
Если вы не возражаете, взгляните на этот вопрос. - person Akira; 27.07.2020
comment
@LAD посмотрите на мой ответ, если вы хотите пропустить импорт нескольких библиотек .. - person UWTD TV; 27.07.2020
comment
@UWTDTV я тоже :)) - person Akira; 27.07.2020
comment
@LAD ты к чему? - person UWTD TV; 27.07.2020
comment
@UWTDTV Я также предпочитаю использовать ту же библиотеку, чтобы сделать код чище. - person Akira; 27.07.2020
comment
Извините, я не знаком с BS, я просто хочу предоставить решение. - person dabingsou; 28.07.2020