Запустите HTML-код в браузере (который создается BeautifulSoup) прямо из Python

Я использовал BeautifulSoup для Python 3.3 для успешного удаления желаемой информации с веб-страницы. Я также использовал BeautifulSoup для генерации нового HTML-кода для отображения этой информации. В настоящее время моя программа Python выводит HTML-код, который затем мне нужно скопировать, вставить и сохранить в виде HTML файла, а затем оттуда проверить его в браузере.

Итак, мой вопрос в том, есть ли способ в Python запустить HTML-код, созданный BeautifulSoup, в веб-браузере, чтобы мне не пришлось использовать метод копирования и вставки, который я использую сейчас?

Ответы

Ответ 1

Использование webbrowser.open:

import os
import webbrowser

html = '<html> ...  generated html string ...</html>'
path = os.path.abspath('temp.html')
url = 'file://' + path

with open(path, 'w') as f:
    f.write(html)
webbrowser.open(url)

Альтернативное использование NamedTemporaryFile (чтобы в конечном итоге файл был удален ОС):

import tempfile
import webbrowser

html = '<html> ...  generated html string ...</html>'

with tempfile.NamedTemporaryFile('w', delete=False, suffix='.html') as f:
    url = 'file://' + f.name
    f.write(html)
webbrowser.open(url)

Ответ 2

Используйте Flask, чтобы превратить ваш код в локальное веб-приложение:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def scrape_and_reformat():
    # call your scraping code here
    return '<html><body> ... generated html string ... </body></html>'

if __name__ == '__main__':
    app.run()

Запустите script и укажите браузер на http://127.0.0.1:5000/.

Ответ 3

(это стало достаточно, и я решил, что я должен разделить его как отдельный ответ:)

Как указывает @reptilicus, вы можете использовать встроенный модуль http.server следующим образом:

  • Создайте каталог веб файлов и сохраните в нем свой .html файл.

  • Откройте окно командной строки и сделайте

    cd /my/web/directory
    python -m http.server 8000
    
  • Направьте свой браузер на http://127.0.0.1:8000

Это работает только для статических файлов; он не запускает ваш script и возвращает результаты (как это делает Flask).