AttributeError: у объекта 'ResultSet' нет атрибута 'find_all'
Где ошибка? Я хочу разобрать мой текст без тегов.
from bs4 import BeautifulSoup
import re
import urllib.request
f = urllib.request.urlopen("http://www.championat.com/football/news-2442480-orlov-zenit-obespokoen---pole-na-novom-stadione-mozhet-byt-nekachestvennym.html")
soup = BeautifulSoup(f, 'html.parser')
soup=soup.find_all('div', class_="text-decor article__contain")
invalid_tags = ['b', 'i', 'u', 'br', 'a']
for tag in invalid_tags:
for match in soup.find_all(tag):
match.replaceWithChildren()
soup = ''.join(map(str, soup.contents))
print (soup)
Ошибка:
Traceback (most recent call last):
File "1.py", line 9, in <module>
for match in soup.find_all(tag):
AttributeError: 'ResultSet' object has no attribute 'find_all'
1 ответ
soup=soup.find_all('div', class_="text-decor article__contain")
На этой линии soup
становится ResultSet
экземпляр - в основном список Tag
экземпляры. И вы получаете 'ResultSet' object has no attribute 'find_all'
с этого ResultSet
Экземпляр не имеет find_all()
метод. К вашему сведению, эта проблема на самом деле описана в разделе устранения неполадок в документации:
AttributeError: 'ResultSet' object has no attribute 'foo'
- Обычно это происходит потому, что вы ожидалиfind_all()
вернуть один тег или строку. Ноfind_all()
возвращает список тегов и строк - объект ResultSet. Вам нужно перебрать список и посмотреть.foo каждого из них. Или, если вы действительно хотите только один результат, вам нужно использоватьfind()
вместоfind_all()
,
И вы действительно хотите получить один результат, поскольку на странице есть одна статья:
soup = soup.find('div', class_="text-decor article__contain")
Обратите внимание, что нет необходимости искать теги один за другим, вы можете передать список имен тегов непосредственно find_all()
- BeautifulSoup
достаточно гибок в расположении элементов:
article = soup.find('div', class_="text-decor article__contain")
invalid_tags = ['b', 'i', 'u', 'br', 'a']
for match in article.find_all(invalid_tags):
match.unwrap() # bs4 alternative for replaceWithChildren