python - 避免 scrapy 上的重复值

标签 python web-scraping scrapy

我正在从 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/

相关文章:

python - 如何在 Cygwin 上设置 PYTHONPATH?

python - pymssql 中的 freetds.log 文件非常大。如何禁用?

web-scraping - Scrapy:抓取嵌套链接

python - Scrapy - 使用正则表达式选择 xpath

python - 在html中添加python变量

java - 使用 jsoup 进行网页抓取仅返回表格的一部分

Python Web Scraping 表返回 None

python - 用于提取两个已知 div 之间的所有内容的 Xpath

python - 使用 Python 进行网页抓取 - 链接与表单输入保持不变

python - 覆盖列表中的元素