LoginSignup
21
25

More than 5 years have passed since last update.

Pythonで色々やってみた:スクレイピング(Beautiful Soup+Selenium+PhantomJS)とか形態素解析とか

Last updated at Posted at 2016-11-07

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

最近やったことは、

1,形態素解析
・データをMecabに放り込んで、名詞のみで絞り込んで頻度算出、その後ユーザー辞書追加して再度やってみるという流れを掴んでおきたかったのでちょっとやってみた
・すぐに出来たので特に内容は記載しません。。。

【参考にさせていただいたサイト】
http://qiita.com/fantm21/items/d3d44f7d86f09acda86f
http://qiita.com/naoyu822/items/473756fb8e8bbdc4d734
http://www.mwsoft.jp/programming/munou/mecab_command.html
http://shimz.me/blog/d3-js/2711

2,スクレイピング
・テキストや画像など、スクレイピングは業務に関係することが非常に多いので、ある程度勉強したいなと思い今回は書籍から入ってみた
https://www.amazon.co.jp/dp/4873117615

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

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

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

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

【参考にさせていただいたサイト】
http://doz13189.hatenablog.com/entry/2016/08/21/154219
http://zipsan.hatenablog.jp/entry/20150413/1428861548
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()

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

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

21
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
25