*Aya's Prelude*

大学院生のよしなごと

スクレイピングを勉強する人 #色々な人

1. 実際にスクレイピングしてみた

1.1. はじめに

僕が無理言って友人にチュートリアル用に作ってもらったやつです。主にテキストしかとってこれないけどとりあえず慣れよう!

1.2. 目標

今回の目標はまゆのプロフィールをとってこよう!ってことですね!

f:id:remark_tzi:20180922064554p:plain
まゆのプロフィール

この画像の名前から下をとってくる。

1.3. ソースコードの説明

スクレイピングソースコード書いてもらったので忘れないように説明を付けておく。

1.3.1. 今回使うモジュールのインポート

### スクレイピングするためのアレ

import requests as req
from lxml.html import *
import sys

ここは説明しなくてもいいよね。これから使うモジュールをインポートしただけ。どれをどこで使ってるかはようわからん。

1.3.2. Scrapyingするための関数の定義

classとかよくわからんけどとりあえずいろいろおまじないとかで今回はすます!

これはオブジェクト指向では必須ぽい。気持ちわかる。

### スクレイピングするためのアレ続き

class Scrapying:

    def __init__(self, url):
        self.res = req.get(url)
        self.result = {}

これは欲しい部分を探すやつです!ちなみに今欲しいのはこれ(青いところと灰色のところが対応してる)↓

f:id:remark_tzi:20180922064602p:plain
名前

f:id:remark_tzi:20180922064548p:plain
佐久間まゆ

### スクレイピングするためのアレ続き

    #tableタグを入手 #trまで行きたいってやつ
    def parse(self):
        if self.res.status_code != 200:
            print("Error: Page not found ")
            sys.exit()
        
        self.html = fromstring(self.res.text) #xpath使うときのおまじない
        self.html = self.html.xpath("//table//tr") #xpathの書き方は調べろ
  • //をつけると何もかもすっ飛ばして//の後に行く
  • //は間に何かないと使えない
  • 上の書き方するとリストになる。(xpathだと基本的にはリスト)

f:id:remark_tzi:20180922064545p:plain
みるとこ

今、ソースコードの紫のところがタグ。例で上げると

<div id="なんちゃら">

の<>で囲まれててかつ「紫+何か」の構成のやつの紫部分。とりあえず名前と佐久間まゆの情報だけがほしいのでdivとかtableとかtrとかじゃなくてtdのところがほしいのでそこまで行こう!ってやつが

//table//tr

ってやつ。これは小技だけど一回tableとかtrとか経由することでうまいことリストが作れる。その辺は経験で覚えてこ。(まだよくわかってない)

### スクレイピングするためのアレ続き
               
    def after_parse(self):
        for html in self.html[1:]: #プロフィールってとこはいらないから1からにした
            title, content = html.xpath("td/text()") #td/text()ってのはtdタグに含まれるtextだけを取りに来る
  • 本来"タグA/タグB"は次のタグに行くだけど"タグA/text()"は別物
  • 今回は"名前"と"佐久間まゆ"みたいにtext部分が2つしかないので [名前,佐久間まゆ]っていうリストの中身をtitleとcontentにそれぞれぶち込んでる
### スクレイピングするためのアレ続き

            self.result[title] = content #resultは辞書配列なのでその辺は調べろ
            print("{}: {}".format(title, content)) #"{}: {}".format(A,B) のformatは{}にAとBをそれぞれぶち込むときの文法

ここは特にいうことない。コメントアウトよめばおけ。

### スクレイピングするためのアレ続き

if __name__ == '__main__': #おまじない
    s = Scrapying("https://www65.atwiki.jp/sakumamayu_wiki/")
    s.parse()
    s.after_parse()

ここも特になし。じゃあ切る必要あったかって言われるとよくわからん。

1.4. 出来上がったもの

f:id:remark_tzi:20180922064609p:plain
実行結果

って感じでプロフィールができた。嬉しい。作ったのは俺じゃないけどわかった!ってだけでうれしい。

1.5. Xpathの参考文献

これ見て頑張る。

1.6. 最後に

スクレイピングの練習でやってみただけなので特に悪いことをする予定はないです。(ちなみにスクレイピングで何かする予定も今はない)(そのうちなんかしたい)(しょうもないこととかしたいよね)モチベーション的にまゆが絡むとテンション上がるから選びました。モチベーションを作ってくれたこのサイトの運営者さんとまゆに感謝です。まゆすき。
みんなもそのサイトをみてまゆを知ろう→まゆの日記帳 - 佐久間まゆペディア @ wiki