Python 3 программиста, новичок в BeautifulSoup и HTMLParser. Я использую BeautifulSoup для извлечения всех данных списка определений из файла HTML и пытаюсь сохранить данные dt и данные dd в словаре python в виде пар ключ-значение соответственно. Мой HTML файл (List_page. html):
<!DOCTYPE html>
<html lang="en">
<head>STH here</head>
<body>
<!--some irrelavent things here-->
<dl class="key_value">
<dt>Sine</dt>
<dd>The ratio of the length of the opposite side to the length of the hypotenuse.</dd>
<dt>Cosine</dt>
<dd>The ratio of the length of the adjacent side to the length of the hypotenuse.</dd>
</dl>
<!--some irrelavent things here-->
</body>
</html>
, тогда как когда мой Python код:
from bs4 import BeautifulSoup
from html.parser import HTMLParser
dt = []
dd = []
dl = {}
class DTParser(HTMLParser):
def handle_data(self, data):
dt.append(data)
class DDParser(HTMLParser):
def handle_data(self, data):
dd.append(data)
html_page = open("List_page.html")
soup = BeautifulSoup(html_page, features="lxml")
dts = soup.select("dt")
parser = DTParser()
# Start of part 1:
parser.feed(str(dts[0]).replace('\n', ''))
parser.feed(str(dts[1]).replace('\n', ''))
# end of part 1
dds = soup.select("dd")
parser = DDParser()
# Start of part 2
parser.feed(str(dds[0]).replace('\n', ''))
parser.feed(str(dds[1]).replace('\n', ''))
# End of part 2
dl = dict(zip(dt, dd))
print(dl)
, вывод:
Это выводит материал правильно, как и ожидалось. Однако, когда я заменяю часть 1 (или 2) на l oop, она начинает go неправильно: например,
, код:
# Similar change for part 2
for dt in dts:
parser.feed(str(dts[0]).replace('\n', ''))
только в этом случае говорит мне определение косинуса, а не синуса. С 2 предметами я могу сделать это без всего oop. Но что, если я получу больше предметов? Поэтому хочу узнать правильный способ сделать это. Спасибо.