我正在从 course talk 抓取 MOOC 数据页面,并且我在清理某些字段时遇到问题,例如大学名称。
从上面的链接我想得到:麻省理工学院
这是我用于该字段的 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 ']
最佳答案
您可以通过使用 not
(排除内部子跨度节点)函数和 normalize-space
函数来跳过内部 span
跳过白-仅空格文本字符串和干净文本:
//*[@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()]
关于python - 避免 scrapy 上的重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49958388/