Извлечение данных из статического 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>:&nbsp;0 (0 unique)</li> <li><i>Vulnerable Dependencies</i>:&nbsp;0</li> <li><i>Vulnerabilities Found</i>:&nbsp;0</li> <li><i>Vulnerabilities Suppressed</i>:&nbsp;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
Другие вопросы по тегам