質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • Python

    10811questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Scrapy

    115questions

    Scrapyは、Pythonで開発されたオープンソースソフトウェアです。スクレイピングという、Webサービスから必要な情報を取り出したり自動操作をしたりする技術を使うものです。

【スクレイピング】Scrapyで特定のタグあるいは文字列を除いたデータを取得したい

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 76

mbase

score 10

芥川賞の受賞者データをまとめるために、スクレイピングでScrapyを使っています。

特定のタグおよびクラスに入った文字列を取得したいと考えています。

まず、対象のHTMLは以下のとおりです。

<div id="no8" class="tab-pane fade">
                <dl>
                <dt><span class="no"></span><span class="year">受賞年</span></dt><dd><span class="name">受賞者</span><span class="title head">受賞作</span><span class="magazine ">掲載誌</span></dd>

                <dt><span class="no">159</span><span class="year">2018上</span></dt><dd><span class="name">高橋弘希</span><span class="title">送り火</span><span class="magazine ">文學界</span></dd>
                <dt><span class="no">158</span><span class="year">2017下</span></dt><dd><span class="name">石井遊佳</span><span class="title">百年泥</span><span class="magazine ">新潮</span></dd>
                <dt><span class="no">158</span><span class="year">2017下</span></dt><dd><span class="name">若竹千佐子</span><span class="title">おらおらでひとりいぐも</span><span class="magazine ">文藝</span></dd>
                <dt><span class="no">157</span><span class="year">2017上</span></dt><dd><span class="name">沼田真佑</span><span class="title">影裏<span class="small">(えいり)</span></span><span class="magazine ">文學界</span></dd>
                <dt><span class="no">156</span><span class="year">2016下</span></dt><dd><span class="name">山下澄人</span><span class="title">しんせかい</span><span class="magazine ">新潮</span></dd>
                <dt><span class="no">155</span><span class="year">2016上</span></dt><dd><span class="name">村田沙耶香</span><span class="title">コンビニ人間</span><span class="magazine ">文學界</span></dd>
                <dt><span class="no">154</span><span class="year">2015下</span></dt><dd><span class="name">本谷有希子</span><span class="title">異類婚姻譚<span class="small">(いるいこんいんたん)</span></span><span class="magazine ">群像</span></dd>
                <dt><span class="no">154</span><span class="year">2015下</span></dt><dd><span class="name">滝口悠生</span><span class="title">死んでいない者</span><span class="magazine ">文學界</span></dd>
                <dt><span class="no">153</span><span class="year">2015上</span></dt><dd><span class="name">又吉直樹</span><span class="title">火花</span><span class="magazine ">文學界</span></dd>
                <dt><span class="no">153</span><span class="year">2015上</span></dt><dd><span class="name">羽田圭介</span><span class="title">スクラップ・アンド・ビルド</span><span class="magazine ">文學界</span></dd>
                <dt><span class="no">152</span><span class="year">2014下</span></dt><dd><span class="name">小野正嗣</span><span class="title">九年前の祈り</span><span class="magazine ">群像</span></dd>
                <dt><span class="no">151</span><span class="year">2014上</span></dt><dd><span class="name">柴崎友香</span><span class="title">春の庭</span><span class="magazine ">文學界</span></dd>
                <dt><span class="no">150</span><span class="year">2013下</span></dt><dd><span class="name">小山田浩子</span><span class="title"></span><span class="magazine ">新潮</span></dd>
                <dt><span class="no">149</span><span class="year">2013上</span></dt><dd><span class="name">藤野可織</span><span class="title">爪と目</span><span class="magazine ">新潮</span></dd>
                <dt><span class="no">148</span><span class="year">2012下</span></dt><dd><span class="name">黒田夏子</span><span class="title">abさんご</span><span class="magazine ">早稲田文学</span></dd>
                <dt><span class="no">147</span><span class="year">2012上</span></dt><dd><span class="name">鹿島田真希</span><span class="title">冥土めぐり</span><span class="magazine ">文藝</span></dd>
                <dt><span class="no">146</span><span class="year">2011下</span></dt><dd><span class="name">田中慎弥</span><span class="title">共喰い</span><span class="magazine ">すばる</span></dd>
                <dt><span class="no">146</span><span class="year">2011下</span></dt><dd><span class="name">円城塔</span><span class="title">道化師の蝶</span><span class="magazine ">群像</span></dd>
                <dt><span class="no">145</span><span class="year">2011上</span></dt><dd><span class="name">なし</span></dd>
                <dt><span class="no">144</span><span class="year">2010下</span></dt><dd><span class="name">西村賢太</span><span class="title">苦役列車</span><span class="magazine ">新潮</span></dd>
                <dt><span class="no">144</span><span class="year">2010下</span></dt><dd><span class="name">朝吹真理子</span><span class="title">きことわ</span><span class="magazine ">新潮</span></dd>
                <dt><span class="no">143</span><span class="year">2010上</span></dt><dd><span class="name">赤染晶子</span><span class="title">乙女の密告</span><span class="magazine ">新潮</span></dd>
                <dt><span class="no">142</span><span class="year">2009下</span></dt><dd><span class="name">なし</span></dd>
                <dt><span class="no">141</span><span class="year">2009上</span></dt><dd><span class="name">磯崎憲一郎</span><span class="title">終の住処</span><span class="magazine ">新潮</span></dd>
                <dt><span class="no">140</span><span class="year">2008下</span></dt><dd><span class="name">津村記久子</span><span class="title">ポトスライムの舟</span><span class="magazine ">群像</span></dd>
                </dl>
                </div>


このうち、受賞者名、受賞作、掲載誌のデータを抜き出すために、class="name" class="title" class="magazine を指定して以下のコードを準備しました。

# -*- coding: utf-8 -*-
import scrapy


class AkutagawaSpider(scrapy.Spider):
    name = 'akutagawa'
    allowed_domains = ['www.bunshun.co.jp']
    start_urls = ['http://www.bunshun.co.jp/shinkoukai/award/akutagawa/list.html']


    def parse(self, response):

        for akutagawa in response.css('div.tab-content'):

            # 著者名を取得
            names = akutagawa.css('div.tab-pane dl dd span.name::text')[1:].extract()

            # 書名を取得
            titles = akutagawa.css('div.tab-pane dl dd span.title::text')[1:].extract()

            # 雑誌名を取得
            magazines = akutagawa.css('div.tab-pane dl dd span.magazine::text')[1:].extract()

            # 著者名、書名、雑誌名が入ったイテラブルを1つずつ変数に入れて出力
            for name, title, magazine in zip(names, titles, magazines):
                yield { 'name': name,
                        'title': title,
                        'magazine': magazine}


これで著者名、書名、掲載誌は取得できるのですが、カラム名の

<span class="name">受賞者</span><span class="title head">受賞作</span><span class="magazine ">掲載誌</span>


がデータに混ざってしまいます。これは、このカラム名と各データの class が同じ名前であることが原因です。

上記のカラム名を除いてデータを取得することは可能でしょうか?

自分で考えた限りだと、 dl要素内の2つめ以降のdd要素を取り出せれば上手くいくのかな?と思いました。

あるいは正規表現なども考えたのですが、なにかスマートな取得方法がおわかりでしたら教えてください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • t_obara

    2019/03/13 16:51

    本来dtに関する説明をddで行うような構造になるべきで、ヘッダであれば、それをなんらかの手段で分けるべきかと思いますが、元のサイトを見ると、最初に現れたdtやddをヘッダと見なすようにしているので、取得する方も先頭以外と言う抽出方法を利用すれば良いのではないでしょうか。

    キャンセル

まだ回答がついていません

同じタグがついた質問を見る

  • Python

    10811questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Scrapy

    115questions

    Scrapyは、Pythonで開発されたオープンソースソフトウェアです。スクレイピングという、Webサービスから必要な情報を取り出したり自動操作をしたりする技術を使うものです。