PySide (Qt for Python) は、Qt(キュート)の Python バインディングで、GUI などを構築するためのクロスプラットフォームなライブラリです。Linux/X11, macOS および Microsoft Windows をサポートしています。配布ライセンスは LGPL で公開されています。
本ブログではすでに QWebEngineView クラスを利用したシンプルなインターネットブラウザを何度か紹介してきました。
Google Chrome をはじめ無料で利用できる汎用で高機能なインターネットブラウザが利用できるのに、同等な機能を備えたウィジェットを利用したくなるのは、特定のウェブサイトの内容を取得して、解析や整理、その他いろいろなことをしたい場合に、プログラム的なアプローチが取れて便利だからです。
そのためには表示されているサイトの内容 (HTML) をプログラム的に取得できることが必要です。ということで、今回は、QWebEngineView で表示したサイトの HTML を取得する簡単なサンプルの紹介をします。
- QWebEngineView で読み込んだ URL は、QWebEnginePage に表示されますが、ここに表示されたウェブサイトの HTML のソースを取得します。
なお、本サンプルで使用しているウェブサイトは、下記を利用しています。
下記の OS 環境で動作確認をしています。
Fedora Workstation 39 | x86_64 | |
Python | 3.12.1 | |
PySide6 | 6.6.1 |
サンプルを以下に示します。このサンプルは、指定した URL を表示して、そのソースを標準出力するという単純なものです。
このサンプルの実行例を以下に示しました。
表示された HTML の内容が標準出力されます。
doh set to "" -- SystemOnly
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<!-- Google tag (gtag.js) -->
<script type="text/javascript" async="" src="https://ssl.google-analytics.com/ga.js"></script><script async="" src="https://www.googletagmanager.com/gtag/js?id=G-ZML74SB67X"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-ZML74SB67X');
</script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta name="keywords" content="パンダ,ジャイアントパンダ,上野パンダ,上野動物園,上野,保護,サポート基金,ZOONET">
<meta name="description" content="東京動物園協会の運営する「UENO-PANDA.JP」は、上野動物園のジャイアントパンダを紹介する公式サイトです。ジャイアントパンダの個体情報をはじめ、上野動物園へのアクセス、開園時間、園内マップ、その他ジャイアントパンダ保護サポート基金等、さまざまな情報を掲載しています。">
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0">
<link rel="shortcut icon" href="//www.ueno-panda.jp/favicon.ico" type="image/x-icon">
<link rel="icon" href="//www.ueno-panda.jp/favicon.ico" type="image/x-icon">
<title>上野動物園のジャイアントパンダ情報サイト「UENO-PANDA.JP」</title>
:
:
(以下省略)
QWebEingineView クラスを継承した Example クラスで、引数で与えられた URL の読み込みを完了すると発生する loadFinished シグナルを、on_load_finished メソッド(スロット)に接続します。
class Example(QWebEngineView): def __init__(self, url: QUrl): super().__init__() self.load(url) self.loadFinished.connect(self.on_load_finished) : :
QWebEngineView 内の URL を表示している QWebEnginePage のインスタンスに対して、runJavaScript メソッドで指定した Javascript を実行しています。その結果をスタティックメソッド print_html に渡して出力しています。
このサンプルで使用している Javascript は、DOM の ルートの要素 document.documentElement における outerHTML プロパティを取り出しているだけです。
def on_load_finished(self, flag: bool) -> bool: if not flag: return False page: QWebEnginePage = self.page() page.runJavaScript( "document.documentElement.outerHTML", 0, self.print_html ) return True
今回は取り出した HTML の内容を標準出力しているだけですが、用途に応じていろいろと応用できると思います。
参考サイト
にほんブログ村
#オープンソース
0 件のコメント:
コメントを投稿