python初心者がスクレイピングの問題点を列挙してみた

他人のコードでココナラをスクレイピングしてブルーオーシャンスキルを発掘しようという試みをしている方がいらっしゃいました。僕はそのコードをコピペして、なんとか動かすことはできたのですが、いろいろと問題が生じたので問題点を素人目線で語ってみようと思います。

ココナラでブルーオーシャンスキルを発掘する。

利用するモジュール

今回の紹介するコードで使用するモジュールは下記のとおりです。

  • selenium
  • pandas
  • time

pandasモジュールは詳しいことはわからないのですが、スクレイピングで集めてきたデータを簡単にcsvに変換してくれるみたいです。pythonには標準でcsvモジュールがあります。おそらくcsvモジュールでもできるとは思いますが、pandasを使ったほうが楽です。しかしpandasモジュールを使うと中でなにがおこっているのか筆者はわかっていません。

ココナラを解析するPythonコード

#ココナラを解析する。 -coconara.py
from selenium import webdriver
import pandas
import time

browser = webdriver.PhantomJS()
browser.get("https://coconala.com/categories/8")
df = pandas.read_csv('trend.csv', index_col=0)

page = 1
while True: #continue until getting the last page

if len(browser.find_elements_by_css_selector("a.next")) > 0:
 print("######################page: {} ########################".format(page))
 print("Starting to get posts...")

time.sleep(5)

posts = browser.find_elements_by_css_selector(".listContentBox") #ページ内のタイトル複数
 print (len(posts))

for post in posts:
 try:
 title = post.find_element_by_css_selector("a.js-service-view-tracker").text
 print(title)
 detail = post.find_element_by_css_selector("h3").text
 print(detail)
 price = post.find_element_by_css_selector("strong.red").text
 print(price)
 liked = post.find_element_by_css_selector("span.overlay").text
 print(liked)

url = post.find_element_by_css_selector("a.js-service-view-tracker").get_attribute("href")
 se = pandas.Series([title,detail, price, liked,url],['title', 'detail','price','liked','url'])
 df = df.append(se, ignore_index=True)
 except:
 print("Error:Advertisement appeared.Skipping...")

page+=1

btn = browser.find_element_by_css_selector("a.next").get_attribute("href")
 print("next url:{}".format(btn))
 browser.get(btn)
 print("Moving to next page......")

else:
 print("no pager exist anymore")
 break

print("Finished Scraping. Writing CSV.......")
df.to_csv("output.csv")
print("DONE")

スクレイピングの問題点を素人が語ってみる

  1. 成功するまで待たないといけない。
  2. プログラムをほったらかしておくと心配。
  3. 要素の取り方がえげつない。
  4. 精神的に怖い

スクレイピングは要素を見つけ出すまでが大変です。(もしかしたら効率化できるのかもしれないけど)問題は1,2番目です。whileにしてしまうと、全部掘り出すまで時間がかかります。プログラムを実行しておでかけ♪というのは筆者の精神ではちょっときついものがありました。

3番目はこのコードでいくとelementsからelementを取得していることになります。(なるほどその手があったか!)という感じはしますがもっと他にいい方法はないものかと思いました。

4番は短く掘る分にはいいのですが、スクレイピングを実行する前の精神状態がわりときついです。プログラムを実行するのが怖いです。他人のコードにいちゃもんをつけるような形になってしまいましたが、最初は最小範囲でデータをとってきてテストするのがよいかもしれないですね。