ホームページ > バックエンド開発 > Python チュートリアル > Python は Phantomjs を使用して、JS をレンダリングした後に Web ページをクロールします

Python は Phantomjs を使用して、JS をレンダリングした後に Web ページをクロールします

大家讲道理
リリース: 2016-11-07 09:59:11
オリジナル
1405 人が閲覧しました

最近ウェブサイトをクロールする必要がありましたが、残念ながらページはすべて JS レンダリング後に生成されていたため、通常のクローラー フレームワークでは処理できなかったため、Phantomjs を使用してプロキシを構築することを考えました。
Python が Phantomjs を呼び出すための既製のサードパーティ ライブラリはないようです (存在する場合は、お知らせください)。試してみたところ、既製のソリューションを提供しているのは pyspider だけであることがわかりました。
簡単に試してみたところ、pyspider はどちらかというと初心者向けに作られたクローラー ツールに似ていて、まるでおばあちゃんのようで、時には几帳面で、時にはおしゃべりなような気がします。
軽量ガジェットはもっと人気があるはずです。私は、ブラウザで Python を書くのに耐えるどころか、PyQuery (HTML の解析に pyspider を使用します) を学ぶ必要もなく、お気に入りの BeautifulSoup を一緒に使いたいという少し利己的な意図もあります。
そこで私は午後をかけて、Phantomjs エージェントを実装する pyspider の部分を取り出して、それを小さなクローラー モジュールに変換しました。皆さんに気に入っていただければ幸いです (binux に感謝!)。

準備

もちろんPhantomjsが必要です、ナンセンス! (Linux では、supervisord を使用して保護するのが最善です。クロールするときは、Phantomjs を開いたままにする必要があります)

プロジェクト パスの phantomjs_fetcher.js から開始します: phantomjs phantomjs_fetcher.js [port]

tornado の依存関係をインストールします (tornado httpclient モジュールを使用)

通話はとても簡単です

from tornado_fetcher import Fetcher
# 创建一个爬虫
>>> fetcher=Fetcher(
    user_agent='phantomjs', # 模拟浏览器的User-Agent
    phantomjs_proxy='http://localhost:12306', # phantomjs的地址
    poolsize=10, # 最大的httpclient数量
    async=False # 同步还是异步
    )
# 开始连接Phantomjs的代理,可以渲染JS!
>>> fetcher.phantomjs_fetch(url)
# 渲染成功后执行额外的JS脚本(注意用function包起来!)
>>> fetcher.phantomjs_fetch(url, js_script='function(){setTimeout("window.scrollTo(0,100000)}", 1000)')
ログイン後にコピー


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート