scrappyで、元のページと下位層のページを行ったり来たりしたい。

実現したいこと

scrapyでスクレイピングをしたい。
いくつかの項目は最初に指定したurlから取得します。
ページにリンクされているurlを取得できたので、そのurlにアクセスしてスクレイピングを行いたい。
ただし、対応するデータは1行にまとめたいので、元のurlと下位層のurlを行ったり来たりしたい。

前提

元のページからスクレイピングで取得したurlは、元のページの下位層にあるページです。

発生している問題・エラーメッセージ

なし

該当のソースコード

python

1import scrapy 2 3 4# ScrapyのSpiderクラスを継承して、新しいSpiderを定義5class ResultSpider(scrapy.Spider):6 7 # spiderの名前を "result" に指定。Spiderを識別するために使用する。8 name = 'result'9 10 # Spiderがアクセスすることを許可されているドメインを指定11 allowed_domains = ['ドメイン名']12 13 # Spiderがクロールを始める最初のURLを指定14 start_urls = ['最初のURL']15 16 17 # Spiderがレスポンスを受け取ると呼び出されるメソッド18 def parse(self, response):19 20 # 共通する要素を取得し、変数eventsに格納21 events = response.xpath('//div[@class="record-match-result"]')22 23 # scrapyのparseメソッドでは、yieldを使って値を返す。24 # 何か値をxpathで取得した後、その値をyieldを用いて辞書型で返すことで、その結果が画面やファイルに出力される。25 for event in events:26 27 # 下位層のurlを取得28 url = [event.xpath('.//a/@href').get()]29 30 yield {31 'score': event.xpath('.//div[@class="クラス名"]/text()').get(),32 'URL': event.xpath('.//a/@href').get(),33 '人数': url.xpath(url&'//span[@class="attendance"]/text()').get()34 }35

試したこと

上記のコードを作成したうえで、ターミナルで「scrapy crawl result -o data.csv」と命令してcsvファイルを作成しています。

「'人数': url.xpath(url&'//span[@class="attendance"]/text()').get()」をコメントアウトすると、それ以外の項目は問題なくスクレイピングできます。

コメントを投稿

0 コメント