PythonでScrapyをしております。
芥川賞について、作者・書名・掲載誌を1つの情報にまとめたいと考えております。
スクレイピングしたいURLは以下のサイトです。
http://www.bunshun.co.jp/shinkoukai/award/akutagawa/list.html
以下のコードを書きました(おそらくかなり無駄なfor文を書いていると思います…)。
python
1# -*- coding: utf-8 -*- 2import scrapy 3 4 5class AkutagawaSpider(scrapy.Spider): 6 name = 'akutagawa' 7 allowed_domains = ['www.bunshun.co.jp'] 8 start_urls = ['http://www.bunshun.co.jp/shinkoukai/award/akutagawa/list.html'] 9 10 def parse(self, response): 11 for akutagawa in response.css('div.tab-content'): 12 13 # 著者名のリストを取得 14 names = [] 15 names += akutagawa.css('div.tab-pane dl dd span.name::text')[1:].extract() 16 17 for name in names: 18 name = name 19 20 21 # 書名のリストを取得 22 titles = [] 23 titles += akutagawa.css('div.tab-pane dl dd span.title::text')[1:].extract() 24 25 for title in titles: 26 title = title 27 28 29 # 雑誌名のリストを取得 30 magazines = [] 31 magazines += akutagawa.css('div.tab-pane dl dd span.magazine::text')[1:].extract() 32 33 for magazine in magazines: 34 magazine = magazine 35 36 37 38 yield{ 39 'name': name, 40 'title': title, 41 'magazine': magazine, 42 }
name, title, magazineに入れた変数を使って、最後の yield で{著者名, 書名, 掲載誌}という情報をすべて抜き出したいと考えております。
実行結果は以下のとおり、最後の情報1つしかしか抜き出せません。おそらく for文 の過程でデータが上書きされてしまっているのだと思います。
{'name': '石川達三', 'title': '蒼氓', 'magazine': '星座'}
芥川賞作家すべての情報を上記のタプルで抜き出したいです。
names, titles, magazinesのリストには各データがすべて入っているのですが、それを一つずつのタプルにまとめる方法が知りたいです。
最終的にはすべてをファイルに出力してデータとして使うつもりです。
何卒、よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー