Извлечение данных из статического HTML-файла с использованием Python 3.5
У меня есть статическая HTML-страница, сохраненная на локальной машине. Я попытался с помощью простого открытия файла и BeautifulSoup. Когда файл открыт, он не читает весь html-файл из-за ошибки юникода, а BeautifulSoup работает на живых сайтах.
#with beautifulSoup
from bs4 import BeautifulSoup
import urllib.request
url="Stack Overflow.html"
page = urllib.request.urlopen(url)
soup = BeautifulSoup(page.read())
universities=soup.find_all('a',class_='institution')
for university in universities:
print(university['href']+","+university.string)
#Simple file read
with open('Stack Overflow.html', encoding='utf-8') as f:
for line in f:
print(repr(line))
После прочтения HTML я хочу извлечь данные из ul
а также li
который не имеет никаких атрибутов. Любые рекомендации приветствуются.
2 ответа
Я не знаю, что вы имеете в виду. Я просто понимаю, что вы хотите прочитать все HTML-данные из локального хранилища и проанализировать некоторые DOM с bs4
,
право?
Я предлагаю немного кода здесь:
from bs4 import BeautifulSoup
with open("Stack Overflow.html", encoding="utf-8") as f:
data = f.read()
soup = BeautifulSoup(data, 'html.parser')
# universities = soup.find_all('a', class_='institution')
# for university in universities:
# print(university['href'] + "," + university.string)
ul_list = soup.select("ul")
for ul in ul_list:
if not ul.attrs:
for li in ul.select("li"):
if not li.attrs:
print(li.get_text().strip())
Этот вопрос о том, как создать объект BeautifulSoup.
Чтобы разобрать документ, передайте его в конструктор BeautifulSoup. Вы можете передать строку или открытый дескриптор файла:
from bs4 import BeautifulSoup soup = BeautifulSoup(open("index.html")) soup = BeautifulSoup("<html>data</html>")
Просто передайте объект файла в BeautifulSoup, вам не нужно специально добавлять информацию о кодировке, BS справится с этим.
Сначала документ преобразуется в Unicode, а объекты HTML преобразуются в символы Unicode:
Если у вас есть проблемы с извлечением данных, вы должны опубликовать HTML-код.
Выдержка:
import bs4
html = '''<ul class="indent"> <li><i>dependency-check version</i>: 1.4.3</li> <li><i>Report Generated On</i>: Dec 30, 2016 at 13:33:27 UTC</li> <li><i>Dependencies Scanned</i>: 0 (0 unique)</li> <li><i>Vulnerable Dependencies</i>: 0</li> <li><i>Vulnerabilities Found</i>: 0</li> <li><i>Vulnerabilities Suppressed</i>: 0</li> <li class="scaninfo">...</li>'''
soup = bs4.BeautifulSoup(html, 'lxml')
for i in soup.find_all('li', class_=False):
print(i.text)
из:
dependency-check version: 1.4.3
Report Generated On: Dec 30, 2016 at 13:33:27 UTC
Dependencies Scanned: 0 (0 unique)
Vulnerable Dependencies: 0
Vulnerabilities Found: 0
Vulnerabilities Suppressed: 0