私はscrapyでスパイダーを書いていますが、jsでレンダリングされたWebサイトに出くわしたため、urllib2.open_urlが機能しません。webbrowser.open_new(url)でブラウザを開くことができましたが、webbrowserでページのsrcコードを取得する方法が見つかりませんでした。webbrowserでこれを行うために使用できる方法はありますか、またはjsサイトを処理するためのwebbrowserなしの他のソリューションはありますか?
4 に答える
そこで利用可能な Webkit エンジンでスクレーパーを使用できます。
それらの1つはドライスクレイプです。
例:
import dryscrape
search_term = 'dryscrape'
# set up a web scraping session
sess = dryscrape.Session(base_url = 'http://google.com')
# we don't need images
sess.set_attribute('auto_load_images', False)
# visit homepage and search for a term
sess.visit('/')
q = sess.at_xpath('//*[@name="q"]')
q.set(search_term)
q.form().submit()
# extract all links
for link in sess.xpath('//a[@href]'):
print link['href']
# save a screenshot of the web page
sess.render('google.png')
print "Screenshot written to 'google.png'"
詳細については、次を参照してください。
https://github.com/niklasb/dryscrape
https://dryscrape.readthedocs.org/en/latest/index.html
数日間、同じ問題に対する答えを見つけようとしています。
WebKitでQT フレームワークを試すことをお勧めします。2 つの Python バインディングがあります。1 つはPyQtで、もう 1 つはPySideです。より複雑なものを作成したい場合や、コードを 100% 制御したい場合は、それらを直接使用できます。
ブラウザ環境で JavaScript を実行するような些細なことには、Ghost.pyを使用できます。コマンドラインから使用する場合、ある種のドキュメントといくつかの問題がありますが、それ以外は素晴らしいです。
完全な js エンジンが必要な場合は、Python から webkit を駆動する方法がいくつかあります。最近まで、この種のことはSeleniumで行われていました。Selenium はブラウザー全体を駆動します。
最近では、Webkit エンジン (v8 JavaScript エンジンを含む) を Python から実行するための、より新しく簡単な方法があります。この SO の質問を参照してください: Python 用のヘッドレス ブラウザ (Javascript のサポートが必要です!)
これは、このブログを Webkit を使用した Javascript Web ページのスクレイピングの例として参照しています。多かれ少なかれ、必要なことだけを行うように見えます。
JavaScript を処理する必要がある場合は、JavaScript エンジンを実装する必要があります。これにより、スパイダーがより複雑になります。主な理由は、JavaScript はほとんどの場合、時間またはユーザーのアクションに基づいて DOM を変更するためです。これにより、クローラーで JS を処理することが非常に困難になります。スパイダーで JavaScript を処理する必要がある場合は、Mozilla の JavaScript エンジンを参照してください: https://developer.mozilla.org/en/docs/SpiderMonkey