その1からの続きです。どうもこの頃日にちをまたいでしまいますね(仕事が忙しい、、、)。
その1で躓いたh3タグの中を取得するには、そのまま変数をprintすれば良いだけでした。こんな感じです。
for link in soup.find_all('h3'): print(link)
実行結果
<h3 class="skin-widgetTitle" data-uranus-component="widgetTitle" lang="en">Profile</h3> <h3 class="skin-widgetTitle" data-uranus-component="widgetTitle" lang="en">Recent Entries</h3> <h3 class="skin-widgetTitle" data-uranus-component="widgetTitle" lang="en">Theme</h3> <h3 class="skin-widgetTitle" data-uranus-component="widgetTitle" lang="en">Archives</h3> <h3 class="skin-widgetTitle" data-uranus-component="widgetTitle" lang="en">Readers</h3>
とはいえ、別に欲しいのはh3タグではないので、続けていきます。
Google Chormの検証機能でブログのエントリーのタイトルはh2に入っていることがわかりました。
h2を取得してみます。
for link in soup.find_all('h2'): print(link)
実行結果。
<h2 data-uranus-component="entryItemTitle"><a class="" href="/saho-iwatate/entry-12392720547.html">大事なこと</a></h2> <h2 data-uranus-component="entryItemTitle"><a class="" href="/saho-iwatate/entry-12389250032.html">はむっと</a></h2> <h2 data-uranus-component="entryItemTitle"><a class="" href="/saho-iwatate/entry-12387116933.html">まさか…</a></h2> (以下、省略)
あとはh2タグのtextを抜き出せばタイトルは得られるはずです。
h2 = soup.find_all('h2') for title in h2: print(title.text)
実行結果。
大事なこと はむっと まさか… おもちゃの夏 朝なのか夜なのか 世界選抜総選挙 君は僕の風 (以下、省略)
ブログの各エントリーのタイトルを取得できました。 どうでもいいですけど、ずいぶんシンプルなタイトルですね。
エントリーのタイトルも取得できて、スクレイピングにも慣れてきたところで、やっと本題のクローリングをしていきたいと思います。 ひとまずURLの取得は昨日の時点でわかっていますので、リストに格納します。
links =[] for link in soup.find_all('a'): url = link.get('href') links.append(url)
リストの中を見てみましたら、新しいエントリーのURLは13番目以降からありましたので、スライドさせて表示させてみます。
links[12:20]
['/saho-iwatate/entrylist.html', '/saho-iwatate/archive-201807.html', '/saho-iwatate/theme-10100573339.html', '/saho-iwatate/amemberentrylist.html', '/saho-iwatate/entry-12392720547.html', '/saho-iwatate/entry-12392720547.html', '/saho-iwatate/entry-12392720547.html#cbox', '/saho-iwatate/theme-10100573339.html']
うまくできてそうですね。 それで、実際の各エントリーのURLはこんな感じになっています。
https://ameblo.jp/saho-iwatate/entry-○○○○○○.html
これをコード上で指定するには、
https://ameblo.jp/ + (list[i])
とやれば良さそうな気がします。14日目でやったこの形ですね。
for content in os.listdir('test'): with open('test/' + content, 'r') as read_file,
dailytextmining.hatenablog.com
この時使ったコードをアメブロのURlの形に合わせて書き直してみます。
for urls in links[12:20]: print("https://ameblo.jp/" + urls)
実行結果。
https://ameblo.jp//saho-iwatate/entrylist.html https://ameblo.jp//saho-iwatate/archive-201807.html https://ameblo.jp//saho-iwatate/theme-10100573339.html https://ameblo.jp//saho-iwatate/amemberentrylist.html https://ameblo.jp//saho-iwatate/entry-12392720547.html https://ameblo.jp//saho-iwatate/entry-12392720547.html https://ameblo.jp//saho-iwatate/entry-12392720547.html#cbox https://ameblo.jp//saho-iwatate/theme-10100573339.html
しっかりとアクセスできるURLを取得できました。
それで、これをさっきのコードに代入すれば良いので、こんな感じかと思います。テキストを出力すると、すごい量になりそうなので、まずはタイトルだけをprintしてみます。
for urls in links[12:20]: entry_url = "https://ameblo.jp/" + urls req = urllib.request.urlopen(entry_url) soup = BeautifulSoup(req.read(), "lxml") print("title.string:" + str(soup.title.string))
実行結果。
title.string:ブログ記事一覧|AKB48 岩立沙穂オフィシャルブログ「発声練習、はじめま~す♪」Powered by Ameba title.string:2018年07月のブログ|AKB48 岩立沙穂オフィシャルブログ「発声練習、はじめま~す♪」Powered by Ameba title.string:ブログ|AKB48 岩立沙穂オフィシャルブログ「発声練習、はじめま~す♪」Powered by Ameba title.string:アメンバー記事一覧|AKB48 岩立沙穂オフィシャルブログ「発声練習、はじめま~す♪」Powered by Ameba title.string:大事なこと | AKB48 岩立沙穂オフィシャルブログ「発声練習、はじめま~す♪」Powered by Ameba title.string:大事なこと | AKB48 岩立沙穂オフィシャルブログ「発声練習、はじめま~す♪」Powered by Ameba title.string:大事なこと | AKB48 岩立沙穂オフィシャルブログ「発声練習、はじめま~す♪」Powered by Ameba title.string:ブログ|AKB48 岩立沙穂オフィシャルブログ「発声練習、はじめま~す♪」Powered by Ameba
どのページに行っているのかよくわかりませんが、うまく各ページを回れているみたいです。 とりあえず、今日はここまで。
今日の結果
今日のAKBメンバーによる呟きは50件でした。なかなか多いですね。どんなことが呟かれていたのでしょう?
'楽しい': 6, '嬉しい': 5, '可愛い': 5, 'よい': 3, 'あやい': 2, 'かわいい': 2, 'うい': 1, 'ない': 1, 'くい': 1, '眠たい': 1, 'すっごい': 1, '優しい': 1, '心強い': 1, '無い': 1, '早い': 1, 'ダサい': 1, '美しい': 1, '良い': 1, 'おしい': 1, '面白い': 1, 'おかしい': 1, 'ちっちゃい': 1, 'いい': 1, 'かっこいい': 1, 'すごい': 1, '暑い': 1}) 'ちゃん': 11, '時': 9, 'さん': 9, '夏': 8, '日': 7, '楽しい': 6, '今日': 6, '嬉しい': 5, '可愛い': 5, '皆さん': 5, '目': 5, 'ん': 5, 'うた': 4, 'まつり': 4, 'センチメンタルトレイン': 4, '学園': 4, 'する': 20, 'ちゃん': 11, '見る': 11, 'くださる': 11, '観る': 10, '時': 9, 'さん': 9, 'くる': 9, '夏': 8, 'なる': 8, '日': 7, 'てる': 7, '楽しい': 6, '今日': 6, 'れる': 6, '嬉しい': 5, '可愛い': 5, '皆さん': 5, '目': 5,
うーん、呟き件数が多い理由がよくわからないですね。そろそろ違う可視化をしたいです。。。。