我試圖抓取包含電視指南(電影與他們的頻道和開始時間)的網頁。網頁的結構如下所示:For循環在Scrapy中多次返回完整響應
<div class="grid__col__inner">
<div class="tv-guide__channel">
<h6>
<a href="./tv-gids/2be/vandaag">2BE</a>
</h6>
</div>
<div class="program">
<div class="time">22:20</div>
<div class="title"><a href="./2be/vandaag/knowing">Knowing</a></div>
</div>
</div>
該網頁有多個grid__col__inner div。每個頻道一個。每個頻道可以包含多個電影。
我寫蜘蛛與Scrapy框架如下:
def parse(self, response):
for col_inner in response.xpath('//div[@class="grid__col__inner"]'):
chnl = col_inner.xpath('//div[@class="tv-guide__channel"]/h6/a/text()').extract()
for program in col_inner.xpath('//div[@class="program"]'):
item = TVGuideItem()
item['channel'] = chnl
item['start_ts'] = program.xpath('//div[@class="time"]/text()').extract()
item['title'] = program.xpath('//div[@class="title"]/a/text()').extract()
yield item
因爲在grid__col__inner DIV頻道名稱被只提一次,我首先提取它並把它分配給每個項目(電影)。
當我運行此代碼時,它會爲每個grid__col__inner返回完整結果(包含所有電影的所有通道)。在下面你看到for循環的一次運行的結果。當我運行它時,它會多次返回相同的結果。
{ '通道':[u'VTM ' u'VITAYA', u'PRIME STAR ' u'PRIME ACTION', u'PRIME FAMILY ' u'PRIME FEZZTIVAL' , u'NPO3 '], 'start_ts':[u'22:30', u'13:35' , u'20:35' , u'06:30' , u'08: 00', u'09:40', u'11:00'], 'title':[u'Another 48 Hrs', u'Double Bill', u'Man zkt Vrouw', u'82達恩都在4月, u'Rio 2' , u'Epizodaüzivotu beraca zeljeza', u'300:帝國的崛起「]}
我做得不對for循環在這裏?