私は一緒にまとめたスパイダーの問題にぶち当たっています。私はthis siteのトランスクリプトから個々のテキスト行とその対応するタイムスタンプを削り取ろうとしていて、適切なセレクタだと思っていますが、実行するとスパイダの出力は最後の行とタイムスタンプに過ぎません。私は似たような問題を抱えているカップルを見たことがありますが、私の問題を解決する答えはまだ見つかりませんでした。ここでセレクタのリストが与えられたときに最後の要素のみを返すScrapy Spider
はクモです:
# -*- coding: utf-8 -*-
# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.html
import scrapy
class TalTranscriptItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
episode_id = scrapy.Field()
episode_num_text = scrapy.Field()
year = scrapy.Field()
radio_date_text = scrapy.Field()
radio_date_datetime = scrapy.Field()
episode_title = scrapy.Field()
episode_hosts = scrapy.Field()
act_id = scrapy.Field()
line_id = scrapy.Field()
begin_timestamp = scrapy.Field()
speaker_class = scrapy.Field()
speaker_name = scrapy.Field()
line_text = scrapy.Field()
full_audio_link = scrapy.Field()
transcript_url = scrapy.Field()
scrapy shell
で実行すると、正しく動作しているように見えます(行のすべてを描く:
# -*- coding: utf-8 -*-
import scrapy
from this_american_life.items import TalTranscriptItem
class CrawlSpider(scrapy.Spider):
name = "transcript2"
allowed_domains = ["https://www.thisamericanlife.org/radio-archives/episode/1/transcript"]
start_urls = (
'https://www.thisamericanlife.org/radio-archives/episode/1/transcript',
)
def parse(self, response):
item = TalTranscriptItem()
for line in response.xpath('//p'):
item['begin_timestamp'] = line.xpath('//@begin').extract()
item['line_text'] = line.xpath('//text()').extract()
yield item
そして、ここではitems.py
でTalTranscriptItem()
ためのコードです何らかの理由で私はそれを蜘蛛の中で働かせることができませんでした)。
これらの問題のいずれかを明確にすることができて、誰でも提供できるヘルプがあれば大いに感謝します。
「TalTranscriptItem」はどのようなタイプですか? – Hackerman
@Hackerman質問にTalTranscriptItemのコードを追加します。これは、scrapyプロジェクトディレクトリ内のitems.pyファイルのクラスです。 –
'scrap.Field()'は普通のPython辞書であり、リストではありません。 – Hackerman