titles.select('h3/a/text()').extract()
返回一个列表,所以你得到一个列表。Scrapy 不对您的项目结构做出任何假设。
快速解决方法是获得第一个结果:
item['title'] = titles.select('h3/a/text()').extract()[0]
更好的解决方案是使用项目加载器并TakeFirst()
用作输出处理器:
from scrapy.contrib.loader import XPathItemLoader
from scrapy.contrib.loader.processor import TakeFirst, MapCompose
class YourItemLoader(XPathItemLoader):
default_item_class = YourItemClass
default_input_processor = MapCompose(unicode.strip)
default_output_processor = TakeFirst()
# title_in = MapCompose(unicode.strip)
并以这种方式加载项目:
def parse(self, response):
hxs = HtmlXPathSelector(response)
for title in hxs.select("//tr/td"):
loader = YourItemLoader(selector=title, response=response)
loader.add_xpath('title', 'h3/a/text()')
yield loader.load_item()