Как сопоставить элементы, содержащие строку из списка BeautifulSoup? - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть вход. html ниже I

Вход. html https://jsfiddle.net/f86q7ubm/

И я пытаюсь сопоставить все элементы в списке allList с размером = 5, но когда я запускаю следующий код, сопоставление не имеет значений внутри.

from bs4 import BeautifulSoup

fp = open("file.html", "rb")                 
soup = BeautifulSoup(fp,"html5lib")

allList = soup.find_all(True)

matching = [s for s in allList if 'size="5"' in s]  

Что я делаю неправильно?

Ответы [ 2 ]

1 голос
/ 27 февраля 2020
soup = BeautifulSoup(html, 'html.parser')

for item in soup.findAll("font", {'size': 5}):
    print(item.text)

Выход:

TEXT S 5 MORE TEXT
TEXT S 5 MORE TEXT
TEXT S 5 MORE TEXT
1 голос
/ 27 февраля 2020

Может быть (должен) лучший путь к этому, но вы можете просто сделать str(s). Вы пытались найти совпадение в нестроковом объекте:

from bs4 import BeautifulSoup

fp = open("file.html", "rb")                 
soup = BeautifulSoup(fp,"html5lib")

allList = soup.find_all(True)

matching = [s for s in allList if 'size="5"' in str(s)] 

Не уверен, что это именно то, что вам нужно, но лучшим способом может быть:

allList = soup.find_all("font", {"size": "5"}) # you already have the matching elements here
...