ホームページ  >  記事  >  バックエンド開発  >  Python が Web ページ内の js によって追加されたコンテンツをクロールする方法 (コード)

Python が Web ページ内の js によって追加されたコンテンツをクロールする方法 (コード)

不言
不言転載
2018-09-28 14:14:578211ブラウズ

この記事の内容は、Web ページ内に js で追加されたコンテンツ (コード) を Python がどのようにクロールするかという内容であり、一定の参考価値がありますので、困っている友人の参考になれば幸いです。

Web ページをクロールするとき、特定のルールを使用して、返された HTML データから有効な情報を抽出します。ただし、Web ページに JavaScript コードが含まれている場合は、元のデータを取得するためにレンダリング処理を行う必要があります。この時点で、従来の方法を使用してデータをスクレイピングしても、何も得られません。さて、この問題はWebキットを使えば簡単に解決できます。 Web キットは、ブラウザーで実行できることはすべて実行できます。一部のブラウザでは、Web キットが基礎となる Web ページ レンダリング ツールです。 Web キットは QT ライブラリの一部であるため、QT および PyQT4 ライブラリをインストールしている場合は、直接実行できます。

1. 環境の準備

Linux: sudo apt-get install python-qt4

Windows:

ステップ 1: .whl をダウンロード、アドレス: https://www.lfd.uci.edu/~gohlke/pythonlibs/ # pyqt4, ここでは、さまざまな Python バージョンに対応するパッケージをダウンロードできます。

Python が Web ページ内の js によって追加されたコンテンツをクロールする方法 (コード)

ステップ 2: ディレクトリを選択し、ダウンロードしたファイルをディレクトリに置き、cmd、cd でディレクトリに移動し、コマンドを実行します: pip install PyQt4- 4.11.4- cp36-cp36m-win_amd64.whl、インストールを完了します。

Python が Web ページ内の js によって追加されたコンテンツをクロールする方法 (コード)

#ステップ 3: インストールが成功したかどうかを確認します。

Python が Web ページ内の js によって追加されたコンテンツをクロールする方法 (コード)

Python が Web ページ内の js によって追加されたコンテンツをクロールする方法 (コード)

2. 解決策

まず、Web キットを通じてリクエスト情報を送信し、Web ページが表示されるのを待ちます。それを変数に代入します。次に、

lxml を使用して、HTML データから有効な情報を抽出します。このプロセスには時間がかかります。

import sys
from PyQt4.QtWebKit import *
from PyQt4.QtGui import *
from PyQt4.QtCore import *

class Render(QWebPage):  # 用来渲染网页,将url中的所有信息加载下来并存到一个新的框架中
    def __init__(self,url):
        self.app = QApplication(sys.argv)
        QWebPage.__init__(self)
        self.loadFinished.connect(self._loadFinished)
        self.mainFrame().load(QUrl(url))
        self.app.exec_()
    def _loadFinished(self, result):
        self.frame = self.mainFrame()
        self.app.quit()

url = 'http://jandan.net/ooxx'
r = Render(url)
html = r.frame.toHtml()
print(html)

次に、HTML コードを解析する作業ですが、ここでは説明しません。

以上がPython が Web ページ内の js によって追加されたコンテンツをクロールする方法 (コード)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。