首页 > 解决方案 > AttributeError:“SelectorList”对象没有“替换”属性

问题描述

我正在尝试运行一个 Scrapy 蜘蛛并将其全部转储到一个 json 文件中。这是我的代码:

import scrapy
import re


class MissleItem(scrapy.Item):

    missle_name = scrapy.Field()
    missle_type = scrapy.Field()
    missle_origin = scrapy.Field()
    missle_range = scrapy.Field()
    missle_comments = scrapy.Field()



class missleSpider(scrapy.Spider):

    name = 'missle_list'
    allowed_domains = ['en.wikipedia.org']
    start_urls = ['https://en.wikipedia.org/wiki/...']


    def parse(self, response):
        table = response.xpath('///div/table[2]/tbody')
        rows = table.xpath('//tr')
        row = rows[2]
        row.xpath('td//text()')[0].extract()

        for row in response.xpath('// \
        [@class="wikitable"]//tbody//tr'):

            name = {
            'Missle' : row.xpath('td[1]//text()').extract_first(),
            'Type': row.xpath('td[2]//text()').extract_first(),
            'Origin' : 
            row.xpath('td[3]/a//text()').extract_first(), 
            'Range': 
            row.xpath('td[4]//text()').replace(u'\ ', u' 
            ').extract_first(),  
            'Comments' : 
            row.xpath('td[5]//text()').extract_first()}


            yield MissleItem(missle_name=name['Missle'], 
                            missle_type=name['Type'], 
                            missle_origin=name['Origin'], 
                            missle_range=name['Range'], 
                            missle_comments=name['Comments'])

当我运行前面的代码时,我得到: AttributeError: 'SelectorList' object has no attribute 'replace'

我的问题是,如何在没有“nbsp;”的情况下返回我的范围列 额外输出?我试过了:

'Range': row.xpath('td[4]//text()').strip().extract_first()

但后来我得到了一个:

AttributeError: 'SelectorList' object has no attribute 'strip'

任何帮助将不胜感激

标签: pythonscrapy

解决方案


row.xpath('td[4]//text()').replace(u'\ ', u'').extract_first(),

尝试把extract_first()替换前的属性


推荐阅读