我正在从course talk页面中删除MOOC数据,而我在清理某些字段时遇到问题,E.G。大学名称。
从上面的链接我想得到:麻省理工学院
这是我用于该字段的xpath:
response.xpath('//*[@class="course-info__school__name"]//text()').extract()
这里的问题是我从中获取重复值和空字符串:
[u'\n ',
u'University:\xa0',
u'\n Massachusetts Institute of Technology\n ',
u'\n ',
u'University:\xa0',
u'\n Massachusetts Institute of Technology\n ']
答案 0 :(得分:1)
原因在于有两个div,类名为course-info__school__name
。
因此,为了避免重复,您可以更改xpath,以便它只选择类名为course-info__school__name
的第一个div元素
response.xpath('(//div[@class="course-info__school__name"])[1]//text()').extract()
将为您提供
的结果['\n ',
'University:\xa0',
'\n Massachusetts Institute of Technology\n ']
希望它有所帮助!
答案 1 :(得分:1)
您可以使用span
(排除内部子跨节点)函数和not
函数跳过内部normalize-space
以跳过仅限空格的文本字符串和干净文本:
//*[@class="course-info__school__name"]/text()[not(self::span)][normalize-space()]
结果你应该得到两个大学名称相同的字符串:
[u'Massachusetts Institute of Technology',
u'Massachusetts Institute of Technology']
您可以使用python set
仅获取唯一名称:
>>> l = [u'Massachusetts Institute of Technology',
... u'Massachusetts Institute of Technology']
>>> set(l)
set([u'Massachusetts Institute of Technology'])
如果你只需要第一个div的内容,你可以通过索引1获得它只有xpath:
(//*[@class="course-info__school__name"])[1]/text()[not(self::span)][normalize-space()]
答案 2 :(得分:0)
您可以尝试通过这种方式始终获取唯一值。
set(response.xpath('//*[@class="course-info__school__name"]//text()').extract())