Попытка заменить тег <em> на <a>
import requests
import string
from bs4 import BeautifulSoup, Tag
[...]
def disease_spider(maxpages):
i = 0
while i <= maxpages:
url = 'http://www.cdc.gov/DiseasesConditions/az/'+ alpha[i]+'.html'
source_code = requests.get(url)
plain_text = source_code.text
soup = BeautifulSoup(plain_text)
for l in soup.findAll('a', {'class':'noLinking'}):
x =l.find("em")
if x is not None:
return x.em.replaceWith(Tag('a'))
i += 1
Часть текста с сайта использует теги вместо тегов, и я хотел заменить их тегами. Используя этот код, я получаю эту ошибку:
AttributeError: у объекта 'NoneType' нет атрибута 'replaceWith'
1 ответ
Из того, что я понимаю, вы хотите заменить em
с его текстом.
Другими словами, a
элемент, содержащий:
<a class="noLinking" href="http://www.cdc.gov/hi-disease/index.html">
including Hib Infection (<em>Haemophilus influenzae</em> Infection)
</a>
следует заменить на:
<a class="noLinking" href="http://www.cdc.gov/hi-disease/index.html">
including Hib Infection (Haemophilus influenzae Infection)
</a>
В этом случае я бы нашел все em
теги прямо под a
теги и для каждого em
найден тег, замените его текстом replace_with()
:
for em in soup.select('a.noLinking > em'):
em.replace_with(em.text)
Как примечание, замена может не потребоваться, потому что .text
из a
тег даст вам полный текст узла, включая его детей:
In [1]: from bs4 import BeautifulSoup
In [2]: data = """
...: <a class="noLinking" href="http://www.cdc.gov/hi-disease/index.html">
...: including Hib Infection (<em>Haemophilus influenzae</em> Infection)
...: </a>
...: """
In [3]: soup = BeautifulSoup(data)
In [4]: print soup.a.text
including Hib Infection (Haemophilus influenzae Infection)