前提・実現したいこと
scrapyを利用して下記の階層構造のWebページをクローリング、スクレイピングしています。
hoge.com/results/2020-08-01
┣ /AAA.html
┣ /BBB.html
AAA,BBB..の各ページは成績表になっており、
- タイトル(文字列)
- 実施日(文字列)
- 順位(リスト)
- 順位ごとの名前や年齢(リスト)
のように文字列とリストで取得をおこなっているため、CSVでは
Title|Date|Rank|Name
|:--|:--:|--:|
|AAA|2020-08-01|1,2,3,4|A,B,C,D
BBB|2020-08-01|1,2,3,4|A,B,C,D
上記のようにURLごとにレコードとして出力されます。
このテーブルを下記のように配列をカラムとして
列に並ぶように出力したいのですが対応方法がわからず、、
有識者の方にご助言を頂けますと幸いでございます。
|Title|Date|Rank|Name
|:--|:--:|--:|
|AAA|2020-08-01|1|A
|AAA|2020-08-01|2|B
|AAA|2020-08-01|3|C
|AAA|2020-08-01|4|D
|BBB|2020-08-01|1|A
|BBB|2020-08-01|2|B
|BBB|2020-08-01|3|C
|BBB|2020-08-01|4|D
該当のソースコード
class RankSpider(scrapy.Spider): name = 'rank' allowed_domains = ['hoge.com'] start_urls = ['http://hoge.com/results/2020-08-01'] def parse(self, response): for url in response.css('a[class="XXX"]::attr("href")').extract(): yield scrapy.Request(response.urljoin(url), self.parse_item) def parse_item(self, response): item = RankingItem() item['Title'] = response.css('h1::text').get() item['Date'] = response.css('div.date::text').get() item['Rank'] = response.css('li h3.number::text').getall() item['Name'] = response.css('li h4.name::text').getall() yield item
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/18 04:16
2020/08/18 05:34