解析页面时,我拉着:
'label_value': [u'\n\t\t\t\t\t\t\t\t\t\tabc123\n\t\t\t\t\t\t\t\t\t']}
我的目标是拉出相关的" abc123"从该xpath写入CSV时。目前,由于" \ n \ t"在字符串中,它不会写任何东西。环顾四周,我找到了几种方法来实现这一目标,但我无法将其正确放置在我自己的代码中并使其正确执行。
我一直在使用正则表达式和.translate()来删除\ n \ t的实例并清理代码以将其干净地添加到csv中。我没有在正则表达式上取得多大成功,因为这些是作为列表的拉动,所以我放弃使用.translate()。
下面,我添加了用于定义xpath和实际页面解析的代码。在启动蜘蛛并解析初始页面之间有一个步骤,但我没有找到与此问题相关的内容,因此在代码中省略了它。
在以下部分中,我想在哪里添加此代码?当我在初始蜘蛛中定义label_value的xpath,或者当我实际将其提取到ResultsDict时,它会是什么时候?
label_value = './/*[@class="lorem-ipsum"]
改为使用......
label_value = './/*[@class="lorem-ipsum"].translate(None, '\t\n ')
...或
def parsepage(self, response)
time.sleep(2)
self.driver.get(response.url)
selectable_page = Selector(text=self.driver.page_source)
ResultsDict = scraperpageitems()
ResultsDict['label_value'] = selectable_page.xpath(label_value).extract()
改为使用......
ResultsDict['label_value'] = selectable_page.xpath(label_value).extract().translate(None, '\t\n ')
答案 0 :(得分:2)
你只是在寻找strip()
吗?
考虑这个例子(见working on ideone.com)
label_value = '''
abc123
'''
print(label_value)
print(label_value.strip())
<小时/> 对于记录,这就是诀窍:
[x.strip() for x in selectable_page.xpath(label_value).extract()]
答案 1 :(得分:0)
可能最好的方法是修剪空白。
像全球一样
查找^\s+|\s+$
并且什么也没有替换。
你提到剥离Unicode
如果您还要删除Unicode,请使用^\s+|[\x{100}-\x{10ffff}]+|\s+$
不确定Python在类中使用 Unicode 的内容,使用任何形式
他们根据需要提供\uXXXX
或\UXXXXXX
和大括号{}
。
答案 2 :(得分:0)
我认为@Martjin的解决方案......(我赞同评论)
#UNICODE is a pain in my ass! below is a function to strip-out and replace with a space.
def remove_non_ascii(text):
return ''.join([i if ord(i) < 128 else ' ' for i in text])