2014-07-05 36 views
0

我在Vista 64位上使用Python.org版本2.7 64位來運行Scrapy。我正在嘗試從這個網頁上抓取一些文本,並設法清除大部分文本,刪除換行符和HTML標記。但是標籤似乎仍然被包含在文本輸出到命令shell:刪除<u>使用Scrapy的文本中的字符

u' British Grand Prix practice results ', u' 

這是從以下網頁:

http://www.bbc.co.uk/sport/0/formula1/28166984 上面的字符串表示超鏈接到另一個頁面。我曾嘗試使用下面的正則表達式來刪除「U」標記嘗試,但並未奏效:

body = response.xpath("//p").extract() 
body2 = str(body) 
body3 = re.sub(r'(\\[u]|\s){2,}', ' ', body2) 

任何人都可以提出一個方法或刪除這些標籤?另外,如果可能的話,您是否可以使用正則表達式來移除兩個標籤之間的所有內容?

感謝

+0

寧可去做,我相信'u'有表示字符串是unicode,並且似乎還有另一個只有unicode指示符被刪除的內容。 – Jerry

回答

2

u只是蟒蛇的信息,該文本以Unicode編碼。

您必須以正確的方式打印文本才能在沒有此信息的情況下得到它。

a = [ u'hello', u'world' ] 

print a 

[u'hello', u'world'] 

for x in a: 
    print x 

hello 
world 

在你的情況可能body是一個字符串列表

print type(body) 

這樣做

body2 = '' 

for x in body: 
    body += x 

print body2 

甚至更​​好:

body2 = "".join(body) 

print body2 
+0

多數民衆贊成輝煌,謝謝!我一直在使用幾個不同的步驟手動刪除換行符和回車單獨的,但你的解決方案打印兩行純文本,這正是我想要的。 – gdogg371

1

正如furas提到的,只是顯示鋪設編碼。默認情況下,2.7x使用ascii,所以當一個字符串在unicode中時,它用u表示。你可以去來回使用Unicode和編碼(「UTF-8」)

>>> a = 's' 
>>> a 
's' 
>>> a = unicode('s') 
>>> a 
u's' 
>>> a = a.encode('utf-8') 
>>> a 
's' 

下面是如何與清單

>>> ul = [] 
>>> ul.append(unicode('British Grand Prix practice results')) 
>>> ul.append(unicode('some other string')) 
>>> ul 
[u'British Grand Prix practice results', u'some other string'] 
>>> l = [] 
>>> for s in ul: 
... l.append(s.encode('utf-8')) 
... 
>>> l 
['British Grand Prix practice results', 'some other string'] 
>>> 
+0

當您使用上述語法切換回ascii時,它給出了語法錯誤。我沒有在上面的帖子中指定,儘管我正在使用命令'scrapy crawl myproject'在一分鐘內打印命令shell。命令外殼是否支持ascii字符? – gdogg371

+0

實際上忽略,那......語法錯誤是一個流氓逗號,但是unicode符號仍在打印 – gdogg371

相關問題