【プログラミング】Pythonで色々 スクレイピング(Beautiful Soup+Selenium+PhantomJS)とか形態素解析

  • このエントリーをはてなブックマークに追加

かれこれ、平日夜と週末とでPythonプログラミング歴3ヶ月くらいになってきたわけですが、

楽しく引き続きやっています。

 

最近やったことは、

1,形態素解析

・データをMecabに放り込んで、名詞のみで絞り込んで頻度算出、その後ユーザー辞書追加して再度やってみるという流れを掴んでおきたかったのでちょっとやってみた

・すぐに出来たので特に内容は記載しません。。。

 

2,スクレイピング

・テキストや画像など、本当にスクレイピングは関係することが多いので、ある程度勉強したいなと思い書籍から入ってみた

https://www.amazon.co.jp/dp/4873117615

・まずはPython+Beautiful Soupで単ページで構造が分かりやすいものはさくっととれるということがよく分かった

・次いで、JSで出来た生成されてるサイトは上記組み合わせでは難しく、PhantomJS、CasperJSってのがあってJSで書いてスクレイピングすることで、これまたさくっととれるということが分かった

・最後、それら組み合わせ+SeleniumでPythonでもJSのwebサイトからスクレイピングできることが分かった

・とりあえず最後PandasのDataframeでcsv化しようとした時に、UnicodeEncodeErrorが出続けてどうしようかはまりまくったけど、Dataframeでcsv化するところにencodeの指定を入れて解決というなんだかなという結末で、とりあえずやりたいことが実現出来た

【めちゃ参考にさせていただいたサイト】

http://qiita.com/okadate/items/7b9620a5e64b4e906c42

 

単に参考にさせていただいたサイトのソースをコピペで組み合わせさせていただいてるだけですが、以下のようなソースでやりました。。。

import lxml.html
from selenium import webdriver
from bs4 import BeautifulSoup
import pandas as pd
import time

aaa = []
bbb = []
ccc = []

for page in range(1,2): # ページの上限は適宜設定 page=の後に番号が繰り上がるサイトのスクレイピング用です
    driver = webdriver.PhantomJS()
    driver.get('https://www.~~=page=' + str(page))
    data = driver.page_source.encode('utf-8')
    soup = BeautifulSoup(data, 'lxml')

    for o in soup.findAll('h3', class_='hoge'):
        aaa.append(o.string)

    for o1 in soup.findAll('h3', class_='hoge'):
        bbb.append(o1.string)

    for o2 in soup.findAll('div', class_='hoge'):
        ccc.append(o2.get_text())
    time.sleep(3)

df = pd.DataFrame({'aaa':aaa, 'bbb':bbb, 'ccc':ccc})

print(df)
df.to_csv('hogehoge.csv', index=False, encoding='utf-8')

driver.quit()

よく分からず書いてるところ多々ありますが、とりあえず動いた。

引き続き勉強していきます。

SNSでもご購読できます。