[Python] Scrapy 的item()对象使用.append()方法插入空list失败

在练习Python的Scrapy模组时遇到的问题:
将循环爬到的结果用一个个item对象储存,之后插入一个列表

     sites=sel.xpath('//div[@class="course-list"]/div[@class="list max-1152 clearfix"]')
    #print(sites)
    items=[]
    for site in sites:
        item=TutorialItem()
        item['vid_name']=site.xpath('a/@data-title').extract()
        item['vid_addr']=site.xpath('a/@href').extract()
        items.append(item)
        #print(vid_name,vid_addr)
    print(site.extract())

    return items

但是运行完成后的JSON文件内容结果却和预想的不一样
预想时:[ {vid_name : name1, vid_addr : addr1}, {vid_name : name2, vid_addr : addr2},{vid_name : name3, vid_addr : addr3}] 这样的成员为字典的列表
实际上是: { vid_name : [name1,name2, name3], vid_addr : [addr1, addr2, addr3}
求解惑为什么会这样,空列表是定义在循环外,对象定义声明都在循环内,插入列表的方法也在循环内,为什么会造成这样的结果,该怎么修复这个问题

完整代码:
ImoocSpider.py:

import scrapy
from tutorial.items import TutorialItem

class TutorialSpider(scrapy.Spider):
name='Imooc'
allowed_domains=['DOMAIN'] #平台不方便打URL链接
start_urls=['URL']                     #但是抓取的部分没问题,数据都对的

def parse(self,response):
    sel=scrapy.selector.Selector(response)
    #print(sel)
    sites=sel.xpath('//div[@class="course-list"]/div[@class="list max-1152 clearfix"]')
    #print(sites)
    items=[]
    for site in sites:
        item=TutorialItem()
        item['vid_name']=site.xpath('a/@data-title').extract()
        item['vid_addr']=site.xpath('a/@href').extract()
        items.append(item)
        #print(vid_name,vid_addr)
    print(site.extract())
    return items


items.py:
import scrapy

class TutorialItem(scrapy.Item):
vid_name=scrapy.Field()
vid_addr=scrapy.Field()

site.xpath('a/@data-title').extract()的extract()获取的是一个结果列表,用extract_first()或site.xpath('a/@data-title').extract()[0]获取第一个元素。

你print的是site,又不是items,你这是拿勺尝汤,往锅里撒盐啊

因为你的 sites 列表中只有一个 div 元素, for site in sites 只遍历了一次,这个 div 下的有多个 a 标签,你的 xpath 自然就返回这多个 a 标签的 href 组成的列表,即:
{vid_addr: [href1, href2, href3]}

img