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