scrapy/xpaths/regex:正确的xpath/re忽略";链接感叹词“;

scrapy/xpaths/regex:正确的xpath/re忽略";链接感叹词“;,regex,xpath,scrapy,Regex,Xpath,Scrapy,我正在刮一些韩语文本,我遇到了很多“链接感叹”因为缺少更好的单词,html看起来像这样 <a href="path" title="저">는</a> 좋아요 它在一个列表中被分成两个单词 foo == ['저', '는', '좋아요'] 我怎样才能让它保持一个字,就像我的初衷一样 intended: foo == ['좋는', '좋아요'] 编辑:(评论回复) .join()的问题是,据我所知,它将连接所有经常刮取的单词。所以我会以这个结束 ''.join(foo)

我正在刮一些韩语文本,我遇到了很多“链接感叹”因为缺少更好的单词,html看起来像这样

<a href="path" title="저">는</a> 좋아요
它在一个列表中被分成两个单词

foo == ['저', '는', '좋아요']
我怎样才能让它保持一个字,就像我的初衷一样

intended: foo == ['좋는', '좋아요']
编辑:(评论回复)

.join()的问题是,据我所知,它将连接所有经常刮取的单词。所以我会以这个结束

''.join(foo) == ['좋는좋아요']

因此,我认为.join()将不起作用,除非有我缺少的东西

如果您想处理HTML元素的字符串表示,XPath有一个非常有用的方法

元素只有一个字符串后,就可以对单词应用正则表达式

下面是一个python解释器会话示例(我必须稍微更改标记以匹配您显示的结果):

使用正则表达式,您将找到1个单词,然后是2个单词:

>>> response.xpath('.//p//text()').re(ur'[\uac00-\ud7af]+')
[u'\uc800', u'\ub294', u'\uc88b\uc544\uc694']
>>> for e in response.xpath('.//p//text()').re(ur'[\uac00-\ud7af]+'):
...     print e
... 
저
는
좋아요
如果对段落元素使用XPath
string()
函数,即使该元素有其他子元素,如
a
,也会得到一个字符串:

>>> response.xpath('string(.//p)').extract()
[u'\uc800\ub294 \uc88b\uc544\uc694']
>>> print response.xpath('string(.//p)').extract_first()
저는 좋아요
然后,您可以将正则表达式应用于单词拆分:

>>> response.xpath('string(.//p)').re(ur'[\uac00-\ud7af]+')
[u'\uc800\ub294', u'\uc88b\uc544\uc694']
>>> for e in response.xpath('string(.//p)').re(ur'[\uac00-\ud7af]+'):
...     print e
... 
저는
좋아요
请注意,
string(node set)
只考虑作为参数传递的节点集中的第一个元素,因此请确保您的XPath表达式首先匹配所需的元素,或者您也可以使用scrapy选择器链接XPath表达式:

>>> for e in response.xpath('.//p').xpath('string(.)').re(ur'[\uac00-\ud7af]+'):
...     print e
... 
저는
좋아요

'.join(foo)
有用吗?将其分为两部分提取:提取链接后面的文本('좋아요') 并提取链接文本本身。如果单独执行此操作,则可以加入'저' 而且는' 我不太明白如何执行你的建议,你能详细说明一下吗?
>>> response.xpath('string(.//p)').extract()
[u'\uc800\ub294 \uc88b\uc544\uc694']
>>> print response.xpath('string(.//p)').extract_first()
저는 좋아요
>>> response.xpath('string(.//p)').re(ur'[\uac00-\ud7af]+')
[u'\uc800\ub294', u'\uc88b\uc544\uc694']
>>> for e in response.xpath('string(.//p)').re(ur'[\uac00-\ud7af]+'):
...     print e
... 
저는
좋아요
>>> for e in response.xpath('.//p').xpath('string(.)').re(ur'[\uac00-\ud7af]+'):
...     print e
... 
저는
좋아요