Python3.5でウェブページをスクレイプするスクリプトを組んでいます。
現在Forbes.comのページをうまくスクレイプできません。
http://www.forbes.com/sites/julianmitchell/2016/09/27/this-startup-uses-drones-to-map-and-manage-massive-construction-projects/print/
理由としては、
- クリックするとスプラッシュページに強制的にリダイレクトされる。
このページが挟まれているため、以下のコードではスプラッシュページから情報を取得してしまいます。
Python
1import lxml.html 2from selenium import webdriver 3 4target_url = 'http://www.forbes.com/sites/julianmitchell/2016/09/27/this-startup-uses-drones-to-map-and-manage-massive-construction-projects/' 5driver = webdriver.PhantomJS() 6driver.get(target_url) 7root = lxml.html.fromstring(driver.page_source) 8 9content = str(root.xpath('//div[@article-injected-body ng-scope"]/p[position() >= 1 and position() <= last()]/text()')) 10 11 12print(content)
- 印刷専用のページにアクセスしようとすると、通常のページに強制的にリダイレクトされる。
Forbesの記事のページはJSで生成されるため、上記ではPhantomJSとSeleniumを使っています。
しかし、2ページめ以降にまたがる記事も一度に取得するために、印刷専用ページを使おうと思いました。
クリックしてみると、記事URL+/print/ という作りになっていたので、冒頭に貼り付けたURLをターゲットURLとしようとしています。(印刷専用ページはJSをベースではありません。)
このURLを直接たたこうとすると、通常の記事ページにリダイレクトされてしまいます。
ちなみにxpathは以下のように表現しましたがだめでした。
python
1root.xpath('//div[@class="body_inner"]/p[position() >= 1 and position() <= last()]/text()'))
質問としてはこうした動的に遷移する、リダイレクトするページの作りを乗り越えて、記事ページから記事だけを抜き出すにはどのようにアプローチしていけばいいでしょうか?
あなたの回答
tips
プレビュー