【python】seleniumのwebdriverでチョチョイとスクレイピング

目的

pythonwikiペディアのテキストデータをスクレイピングしてくる

手順

webdriverでページに遷移

アメリカ合衆国について書かれたページをスクレイピングしてみる

URL: https://ja.wikipedia.org/wiki/アメリカ

f:id:KDY:20170616010424p:plain

以下のようにしてwebdriverでプログラムからページにアクセスできる

from selenium import webdriver

driver = webdriver.PhantomJS()
driver.get("https://ja.wikipedia.org/wiki/{}".format("アメリカ"))

ちなみにselenium

pip install selenium

phantomjsは

brew install phantomjs

で一発でインストールできる

スクリーンショットを撮って動作を確認

期待通りにページに遷移できているか確かめないと不安なので、 スクリーンショットを撮って確かめてみる。

driver.save_screenshot("screenshot.png")

撮れたスクリーンショット

f:id:KDY:20170616011809p:plain

あれ。。アメリカ合衆国のページじゃない。。

原因

urlをquoteする必要があった

https://ja.wikipedia.org/wiki/アメリカ
↓
https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%A1%E3%83%AA%E3%82%AB%E5%90%88%E8%A1%86%E5%9B%BD

ので、ページ遷移部分を以下のように変更!

from urllib.parse import quote
from selenium import webdriver

driver = webdriver.PhantomJS()
driver.get("https://ja.wikipedia.org/wiki/{}".format(quote("アメリカ")))

これで無事に期待通りのページに遷移できた。

スクレイピングするときは、スクリーンショット取って確認しながら進めるのが結構重要だと思う。

テキストを取得

最後にページのテキストを取得する。

wikieペディアの場合、id=“content"のdiv要素のテキストを取得するのが良さそうだったので、idを指定してテキストを抽出した。

text = driver.find_element_by_id("content").text

でけた。

コードまとめ

# coding: utf-8

from urllib.parse import quote
from selenium import webdriver

def get_text_from_wiki(name):
    driver = webdriver.PhantomJS()
    driver.get("https://ja.wikipedia.org/wiki/{}".format(quote(name)))
    text = driver.find_element_by_id("content").text
    if text.find("ウィキペディアには現在この名前の項目はありません。") != -1:
        return None
    return text

奇天烈なnameを渡してしまいページが存在しなかった場合にはNoneを返すようにしといた。

以上

次回は世界各国のテキストデータを取得してきて、 コネコネ分析してみようと思う。

kdy.hatenablog.com