現代俳句データベースの俳句を取得したいと考えています。
しかしながら、以下のコードでは、複数のページを取得するためには、一つの季節だけで何百という記載をしなければならなく非効率的になってしまいます。
もしよろしければ、効率的なスクレイピングの方法をご教授ください。
何卒、よろしくお願いいたします。
現代俳句データベーストップ
http://www.haiku-data.jp/top.php
python
1# -*- coding: utf-8 -*- 2import MeCab 3import codecs 4import re 5import urllib.parse as par 6import urllib.request as req 7import time 8 9 10def write2file(fname, sentences): 11 with codecs.open(fname, 'w', 'utf-8') as f: 12 f.write("".join(sentences)) 13 14def get_morphemes(sentences): 15 morphemes = [] 16 for sent in sentences: 17 if len(sent) == 0: 18 continue 19 temp = tagger.parse(sent).split() 20 temp.append("。\n") 21 morphemes.append(" ".join(temp)) 22 return morphemes if morphemes else -1 23 24tagger = MeCab.Tagger("-Owakati") 25link = "http://www.haiku-data.jp/kigo_list.php?season_cd=1#result" 26fname_list = ["aimaku"] 27word_list = ["藍蒔く"] 28for fname, word in zip(fname_list, word_list): 29 with req.urlopen(link + par.quote_plus(word)) as response: 30 time.sleep(1) 31 html = response.read().decode('utf-8') 32 all_p_tag = re.findall("<a>.+?</a>", html, re.MULTILINE | re.DOTALL) 33 temp = [] 34 for p in all_p_tag: 35 p = re.sub("[\s!-~]*", "", p) 36 p = p.split("。") 37 morphemes = get_morphemes(p) 38 if morphemes == -1: 39 continue 40 temp = temp + morphemes 41 write2file(fname + ".txt", temp)
複数ページを取得する場合、取得する間隔を最頻でも0.5sec~1.0secほどあけるようにしておいたほうが良いと思います。サイトによってはアクセス拒否されることがありますので。
ご指摘ありがとうございます。こちらでいかがでしょうか?
いいんじゃないでしょうか(質問と違う内容ですみません^^;
いえいえ!興味を持っていただき感謝しております。
結局質問欄記載のWebサイトのなんの情報が得られればいいのでしょうか?
最終的な目標としては、現代俳句データベースに記載されている全俳句を集めたいと思っています。
全俳句を集めたいのであれば、検索ではなく、URL の ID パラメータをインクリメントすればよいのでは?手順を回答に記載しました。
回答4件
あなたの回答
tips
プレビュー