最近ウェブサイトをクロールする必要がありましたが、残念ながらページはすべて 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)')