読者です 読者をやめる 読者になる 読者になる

人工知能スタートアップ取締役 橋崎良哉のブログ(はてな)

人工知能スタートアップ エッジコンサルティング株式会社 橋崎のブログ(http://yoshiyah.com/)のはてな版(コピー)です。

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

Beautiful Soup Selenium PhantomJS プログラミング スクレイピング 形態素解析 Mecab

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

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

 

最近やったことは、

1,形態素解析

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

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

 

2,スクレイピング

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

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

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

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

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

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

 

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

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

 

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

 

scraping.py
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): # ページの上限は適宜設定
    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"):# よく見かけるけど、なんでみんなhogeってするんだろう?
        aaa.append(o.string)

    for o1 in soup.findAll("h3", class_="hoge"):# なんで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()

 

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

 

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