2017-10-13 97 views
0

我已經遇到了一個我放在一起的蜘蛛問題。我試圖從this site上的腳本中找到單行,並找到了一些合適的選擇器,但是在運行時,蜘蛛的輸出只是一遍又一遍的重複。我見過其他類似問題的其他人(like this),但還沒有找到解決我的問題的答案。Scrapy Spider一次又一次地返回相同的元素

(作爲一個說明,我認爲這可能是我的基地Python的編碼和for環路建設的問題,而不是一個問題與scrapy本身)。

這裏是蜘蛛:

# -*- coding: utf-8 -*- 
import scrapy 
from scrapy.linkextractors import LinkExtractor 
from scrapy.spiders import CrawlSpider, Rule 


class TalSpider(CrawlSpider): 
    name = 'tal' 
    allowed_domains = ['https://www.thisamericanlife.org/radio-archives/episode/'] 
    start_urls = ['https://www.thisamericanlife.org/radio-archives/episode/1/transcript/'] 

def parse(self, response): 

    for line in response.xpath('//div'): 
     episode_num_text = line.xpath('//div[contains(@class, "radio-wrapper")]/@id').extract() 
     radio_date_text = line.xpath('//div[contains(@class, "radio-date")]/text()').extract() 
     episode_title = line.xpath('//h2').xpath('a[contains(@href, *)]/text()').extract() 
     begin_timestamp = line.xpath('//p[contains(@begin, *)]/@begin').extract() 
     speaker_class = line.xpath('//div/@class').extract() 
     speaker_name = line.xpath('//h4/text()').extract() 
     line_text = line.xpath('//p[contains(@begin, *)]/text()').extract() 
     full_audio_link = line.xpath('//p[contains(@class, "full-audio")]/text()').extract() 



     for item in zip(episode_num_text, radio_date_text, episode_title, begin_timestamp, speaker_class, speaker_name, line_text, full_audio_link): 
      scraped_info = { 
       'episode_num_text' : item[0], 
       'radio_date_text' : item[1], 
       'episode_title' : item[2], 
       'begin_timestamp' : item[3], 
       'speaker_class' : item[4], 
       'speaker_name' : item[5], 
       'line_text' : item[6], 
       'full_audio_link' : item[7], 
       } 
      yield scraped_info 

這裏是該.csv輸出 which shows the repeated output.

的問題似乎在於在for循環的屏幕抓取。我的想法是這樣的:對於這個選擇器列表中的每個選擇器,拉一個由for循環中的項定義的元素的子集。相反,它似乎在執行:對於此列表中的177個選擇器中的每一個,返回每個定義的項目的第一個元素。

我很高興澄清任何這些問題,並將不勝感激任何人都可以提供的幫助!

+0

你只需要在循環內用一個點來啓動你的xpath表達式,使它們與上下文相關。 – alecxe

回答

1

請注意Scrapy中的絕對XPath與relative XPath

解析時,您正在遍歷從絕對XPath解析的元素。但是,在循環內部,仍然使用絕對XPath,這是錯誤的,應該是相對XPath。

謝謝。

+0

謝謝你,這絕對有幫助! –

相關問題