#python #html #dictionary #parsing
#python #HTML #словарь #синтаксический анализ
Вопрос:
Синтаксический анализ HTML.txt файлы, которые в основном являются частями HTML. У меня есть то, что, как я думал, будет работать, но он повторяет один и тот же адрес для всех ключей (местоположений). Кто-нибудь может найти решение?
with open('AL.txt','r') as f:
contents = f.read()
soup = BeautifulSoup(contents, 'html.parser')
from collections import defaultdict
result = defaultdict(list)
for div in soup.find_all('div'):
for h in soup.find_all('h2'):
location = h.find('a').text
for p in soup.find_all('p'):
p = p.text.replace('n','|').replace('t','').strip()
clean = ' '.join(p.split()).replace('| ','|').replace(' |','|').replace('||','|')
address_clean = clean.replace('| ','|').replace(' |','|').replace('||','|')
result[location]=[address_clean]
result
Комментарии:
1.
for p in soup.find_all('p')
всегда будет возвращать все абзацы, независимо от того, в каком месте документа они появляются. Поэтому ваш сценарий всегда повторяет все абзацы, постоянно перезаписываяresult[location]
. Вам нужно будет найти следующий<p>
после текущего<h2><a>
.2. знаете ли вы, как я могу обновить свой код, чтобы исправить это?
3. Зависит от структуры вашего HTML-кода. Следует ли
<p>
непосредственно за<h2>
тегом?4. Просто предположение: возможно, вы захотите попробовать
p = h.find_next_sibling("p")
вместоfor p in soup.find_all('p'):
того, чтобы получить следующий абзац после текущего заголовка2. Я бы также рекомендовал добавлять местоположения и адреса в новую коллекцию вместо повторногоresult
использования объекта, но это полностью зависит от варианта использования.5. Просто общий совет: вы можете получить больше просмотров и помощи, если примете ответы в качестве решений, установив галочку под ответом, который помог вам решить проблему. Прямо сейчас я вижу, что вы не отметили ни один из ваших вопросов как решенный.