PythonはPhantomjsを利用してJSをレンダリングしたページをキャプチャする


最近あるウェブサイトに登る必要があって、仕方なくページはすべてJSがレンダリングした後に生成したので、普通の爬虫類のフレームワークは定まらないで、そこでPhantomjsで1つの代理店をかけることを考えます.
PythonはPhantomjsを呼び出して既成のサードパーティライブラリがないようで(もしあれば2ちゃんに教えてください)、一周してみるとpyspiderだけが既成のシナリオを提供していることがわかりました.
簡単に試してみると、pyspiderは初心者のために作った爬虫類の道具のように、お母さんのように、細かいことがなく、おしゃべりをしているような気がします.軽量な小物はもっと人気があるはずで、私も少し私心を持っていて、私の大好きなBeautifulSoupを持って一緒に使うことができて、PyQuery(pyspiderはHTMLを解析するために使う)を学ぶ必要はありません.ブラウザがPythonを書く悪い体験に耐える必要はありません(窃笑).
だから午後の時間をかけて、pyspiderの中でPhantomjsエージェントを実現した部分を分解して、独立して小さな爬虫モジュールになって、みんなが好きになることを望んでいます(binuxに感謝します!).
準備作業
  • もちろんPhantomjsがあるんだよ、くだらない話!(Linuxではsupervisordで守ったほうがいい、掴み取らなければならないときはPhantomjsはずっと開いている)
  • 用プロジェクトパス下のphantomjs_fetcher.js起動:phantomjs phantomjs_fetcher.js [port]
  • tornado依存(tornadoを使用したhttpclientモジュール)
  • をインストール
    呼び出しは超簡単です
    pythonfrom 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)')
    

    古い規則、コードは小さい2のGithubで、指摘を歓迎します:PhantomjsFetcher
    由来:建設者は