Python Scrapy,如何使用CSS选择器处理标记之间的missign数据?

Python Scrapy,如何使用CSS选择器处理标记之间的missign数据?,python,web-scraping,scrapy,css-selectors,Python,Web Scraping,Scrapy,Css Selectors,我正在使用scrapy从站点列表中刮取数据,我正在为此使用css选择器 数据如下: Name : John Doe Address : Earth Age : 30 html结构是: <li class='title> <span class='q'>Name</span> <span class='ans>John Doe</span> <br> <span class='q'>Add

我正在使用scrapy从站点列表中刮取数据,我正在为此使用css选择器

数据如下:

Name : John Doe
Address : Earth
Age : 30
html结构是:

<li class='title>
   <span class='q'>Name</span>
   <span class='ans>John Doe</span>
   <br>
   <span class='q'>Address</span>
   <span class='ans>Earth</span>
   <br>
   <span class='q'>Age</span>
   <span class='ans>30</span>
   <br>
</li>

如果要使用XPath表达式,则无需使用
try/except

for title in response.css('li.title'):
    item = {
        'name': title.xpath('.//span[.="Name"]/following-sibling::span[1]/text()').extract_first(),
        'address': title.xpath('.//span[.="Address"]/following-sibling::span[1]/text()').extract_first(),
    }
更新 以下是完整的代码(已测试):


你是说Scrapy对待空跨距的方式与对待内容跨距的方式不同?以什么方式?是的,它从最近的跨度中获取数据并将其放在那里。如果地址丢失,则输出类似于名称,在地址字段中,使用年龄,不使用年龄字段。我要的名称,如果地址是空的是应该显示为空或Null和AGE您希望我们为您创建一个新的刮板?如果没有,那么你最好用你的错误脚本@the new guy更新你的帖子。如果你能告诉我如何处理标记之间缺少的数据,请尝试使用XPath而不是CSS选择器:
'name':title.XPath('//span[.=“name”]/following sibling::span[1]/text()).extract()
'address':title.XPath('//span[=“Address”]/following sibling::span[1]/text()”).extract()
…即使删除了_first(),它也会丢弃第一个数据。如果你能解释一下什么是span[1],我是初学者做什么,以及如何提取每个数据。我尝试了代码,它jst提取了单个列表。@我不知道你在说什么的新家伙。请参阅我更新的代码,它对我有用,谢谢你的帮助
for title in response.css('li.title'):
    item = {
        'name': title.xpath('.//span[.="Name"]/following-sibling::span[1]/text()').extract_first(),
        'address': title.xpath('.//span[.="Address"]/following-sibling::span[1]/text()').extract_first(),
    }
def parse(self, response):
    self.log('hello' +response.url)
    for section in response.xpath('//ul[@id="ImgcategoryCardiologist"]/li'):
            item = {
                'name': section.xpath('.//span[.="Name"]/following-sibling::span[1]/text()').extract_first(),
                'address': section.xpath('.//span[.="Address"]/following-sibling::span[1]/text()').extract_first(),
            }
            yield item