TLDR:Scrapy会转义Unicode空间代码\u0020
,因此strip()
不再识别它。
我正尝试使用Scrapy抓取一些Web链接,如下所示:
class MySpider(scrapy.Spider):
name = 'testSpider'
start_urls = [<someStartUrls>]
def parse(self,response):
for entry in response:
yield {<someComplicatedXPath>.xpath('a/@href').get()}
其中一些链接具有怪异的格式工件,例如,它们看起来像<a href="linkUrl\u0020"> Link Text </a>
或<a href="\u0020linkUrl2"> Link Text </a>
-即,它们中包含Unicode空间。这些空格保留在我的输出中:
linkUrl\u0020
\u0020linkUrl2
要至少删除这样的前导和尾随空格,我在XPath输出周围包裹了“清理”功能:
<...>
def parse(self,response):
for entry in response:
yield {cleanStr(<someComplicatedXPath>.xpath('a/@href').get())}
def cleanStr(webString): # a bit simplified
return webString.strip()
那没有任何作用。当我查看字符串的表示形式时,很清楚为什么:
def cleanStr(webString): # a bit simplified
print(webString) ##### this prints "linkUrl\u0020" #####
print(repr(webString)) ##### this prints "linkUrl\\u0020" #####
return webString.strip()
因此strip()
接收带有转义反斜杠的字符串,并且不再识别Unicode代码。我假设这种转义发生在get()
执行期间,但是我不确定。
虽然可以用蛮力代替这个前Unicode空间,但这肯定不是正确的方法。可靠地处理HTML链接内这些空间的最佳方法是什么?