2017-02-06 78 views
1

我學習使用scrapinghub.com它運行在Python 2.x的 我寫它使用Scrapy一個劇本,我已經爬到一個字符串象下面這樣:如何URL轉換編碼字符串轉換成合適的unicode字符串在python

%3Ctable%20width%3D%22100%25%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%3Ctd%3E%3Cp%20style%3D%22color%3A%23ff0000%3Bfont-size%3A20pt%3Btext-align%3Acenter%3Bfont-weight%3Abold%22%3E%0D%0A%09%E6%84%9B%E8%BF%AA%E9%81%94%20adidas%20Energy%20Boost%20%E8%B7%AF%E8%B7%91%20%E4%BD%8E%E7%AD%92%20%E9%81%8B%E5%8B%95%20%E4%BC%91%E9%96%92%20%E8%B7%91%E9%9E%8B%20%E8%B7%91%E6%AD%A5%20%E6%85%A2%E8%B7%91%20%E9%A6%AC%E6%8B%89%E6%9D%BE%20%E5%81%A5%E8%BA%AB%E6%88%BF%20%E6%B5%81%E8%A1%8C%20%E7%90%83%E9%9E%8B%20%E5%A5%B3%E8%A3%9D%20%E5%A5%B3%E6%AC%BE%20%E5%A5%B3%20%E5%A5%B3%E9%9E%8B%0D%0A%3C%2Fp%3E%0D%0A%3C%2Ftd%3E%3C%2Ftr%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%3Ctd%3E%3Cp%20style%3D%22color%3A%23000000%3Bfont-size%3A14pt%3Btext-align%3Acenter%22%3E%0D%0A%09%EF%BC%8A%E9%9D%88%E6%B4%BB%E3%80%81%E8%BC%95%E9%87%8F%E3%80%81%E8%88%92%E9%81%A9%E5%85%BC%E5%85%B7%E7%9A%84%E9%81%B8%E6%93%87%3Cbr%20%2F%3E%EF%BC%8A%E7%B0%A1%E7%B4%84%E7%8F%BE%E4%BB%A3%E7%9A%84%E7%94%A2%E5%93%81%E8%A8%AD%E8%A8%88%2C%E5%B9%B4%E8%BC%95%E5%A4%9A%E6%A8%A3%E5%8C%96%E7%9A%84%E9%85%8D%E8%89%B2%E6%96%B9%E6%A1%88%2C%E6%9B%B4%E7%82%BA%E7%AC%A6%E5%90%88%E5%B9%B4%E8%BC%95%E6%B6%88%E8%B2%BB%E8%80%85%E7%9A%84%E5%AF%A9%E7%BE%8E%E5%81%8F%E5%A5%BD%3Cbr%20%2F%3E%EF%BC%8A%E7%B0%A1%E5%96%AE%E7%9A%84%E7%B7%9A%E6%A2%9D%E5%92%8C%E4%B9%BE%E6%B7%A8%E7%9A%84%E8%A8%AD%E8%A8%88%2C%E6%8F%90%E4%BE%9B%E4%BA%86%E7%8D%A8%E7%89%B9%E7%9A%84%E7%A9%BF%E6%90%AD%E7%B5%84%E5%90%88%3Cbr%20%2F%3E%EF%BC%8A%E9%80%8F%E6%B0%A3%E8%88%87%E4%BF%9D%E8%AD%B7%E6%80%A7%2C%E7%B5%90%E5%90%88%E4%BA%86ADIDAS%E7%9A%84%E5%89%B5%E6%96%B0%E7%A7%91%E6%8A%80%2C%E5%89%B5%E9%80%A0%E4%BA%86%E5%AE%8C%E7%BE%8E%E7%9A%84%E7%94%A2%E5%93%81%3Cbr%20%2F%3E%0D%0A%3C%2Fp%3E%0D%0A%3C%2Ftd%3E%3C%2Ftr%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%3Ctd%3E%3Cdiv%20align%3D%22center%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fs.yimg.com%2Fwb%2Fimages%2F2B558E585E39649599A9A266349EABD17A4ABC18%22%20%2F%3E%3C%2Fdiv%3E%3C%2Ftd%3E%3C%2Ftr%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Ftable%3E%3Ctable%20width%3D%22100%25%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%3Ctd%3E%3Cp%20style%3D%22color%3A%23000000%3Bfont-size%3A12pt%3Btext-align%3Aleft%3Bfont-weight%3A100%22%3E%0D%0A%09%0D%0A%3C%2Fp%3E%0D%0A%3C%2Ftd%3E%3C%2Ftr%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%3Ctd%3E%3Cdiv%20align%3D%22center%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fs.yimg.com%2Fwb%2Fimages%2F0F1A6CBFE6F6631189D491A17A2A2E7C388F194E%22%20%2F%3E%3Cdiv%3E%3C%2Ftd%3E%3C%2Ftr%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%3Ctd%3E%3C%2Ftd%3E%3C%2Ftr%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Ftable%3E%3Ctable%20width%3D%22100%25%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%3Ctd%3E%3Cp%20style%3D%22color%3A%23000000%3Bfont-size%3A12pt%3Btext-align%3Aleft%3Bfont-weight%3A100%22%3E%0D%0A%09%0D%0A%3C%2Fp%3E%0D%0A%3C%2Ftd%3E%3C%2Ftr%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%3Ctd%3E%3Cdiv%20align%3D%22center%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fs.yimg.com%2Fwb%2Fimages%2FA0C9B09CAC784E2CA81A572E8F9F2E5721812607%22%20%2F%3E%3Cdiv%3E%3C%2Ftd%3E%3C%2Ftr%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%3Ctd%3E%3C%2Ftd%3E%3C%2Ftr%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Ftable%3E 

它總是給我下面的:

<table width="100%"> <tr><td><p style="color:#fa6b81;font-size:18pt;text-align:center;font-weight:bold">(女) æ迪é ADIDAD ENERGY CLOUD W éæ°£ç¶²å¸ ç¾æ­ é» èè·ç¶ ä¼éé æ¢è·é</p></td></tr> <tr><td><p style="color:#000000;font-size:12pt;text-align:center"><font color="BLUE">â»æ¬è³£å ´åççºYAHOOè³¼ç©ä¸­å¿å°ç¨ï¼å¶å®å¹³å°è¥ä½¿ç¨æ¬ç«ç¸éåç~ç屬侵æ¬!!</font><BR><BR></p></td></tr> <tr><td><div align="center"><img src="https://s.yimg.com/wb/images/739F6D54CD0AA4440D67A8BF0E569B0229AB1B37" /></div></td></tr> </table><table width="100%"> <tr><td><p style="color:#000000;font-size:12pt;text-align:left;font-weight:100"></p></td></tr> <tr><td><div align="center"><img src="https://s.yimg.com/wb/images/91D28279378AF5E3C26740855775ECAD3A7F4A6B" /><div></td></tr> <tr><td></td></tr> </table><table width="100%"> <tr><td><p style="color:#000000;font-size:12pt;text-align:left;font-weight:100"></p></td></tr> <tr><td><div align="center"><img src="https://s.yimg.com/wb/images/B2237D69C0886CCF330AFA459E3C03BB4454D01B" /><div></td></tr> <tr><td></td></tr> </table><table width="100%"> <tr><td><p style="color:#000000;font-size:12pt;text-align:left;font-weight:100"></p></td></tr> <tr><td><div align="center"><img src="https://s.yimg.com/wb/images/B60D486A89EDBAFBFE824F00309D069517654050" /><div></td></tr> <tr><td></td></tr> </table><table width="100%"> <tr><td><p style="color:#000000;font-size:12pt;text-align:left;font-weight:100"></p></td></tr> <tr><td><div align="center"><img src="https://s.yimg.com/wb/images/57EAC1C8B09A019AC734F50FB51DB87D0B319002" /><div></td></tr> <tr><td></td></tr> </table><table width="100%"> <tr><td><p style="color:#000000;font-size:12pt;text-align:left;font-weight:100"></p></td></tr> <tr><td><div align="center"><img src="https://s.yimg.com/wb/images/CEC5C31984853968755AE7465BCB251C82676B0B" /><div></td></tr> <tr><td></td></tr> </table><table width="100%"> <tr><td><p style="color:#000000;font-size:12pt;text-align:left;font-weight:100"></p></td></tr> <tr><td><div align="center"><img src="https://s.yimg.com/wb/images/B065DFBACAEC5ABED898492265DEB710EA052358" /><div></td></tr> <tr><td></td></tr> </table> 

我總是得到垃圾文(¥³)æ迪éADIDAD能源CLOUDW¯¯EAE°£ç¶²å¸

從URL編碼的文本到Unicode轉換代碼像下面

  special_text = re.sub("<.*?>", "", special_text) 
      special_text = re.sub("<!--", "", special_text) 
      special_text = re.sub("-->", "", special_text) 
      special_text = re.sub("\n", "", special_text) 
      special_text = special_text.strip() 
      special_text = unquote(special_text) 
      special_text = re.sub("\n", "", special_text) 
      special_text = re.sub("\r", "", special_text) 
      special_text = re.sub("\t", "", special_text) 
      special_text = u' '.join((special_text, '')).encode('utf-8').strip() 

我已經嘗試了很多不同的代碼像

special_text = special_text.encode('utf-8') 
special_text = special_text.decode('utf-8') 

其或者給我錯誤或靜止的垃圾文字

不知道轉換爲unicode的正確方法是什麼?

-----編輯:啓動-----

前:

# -*- coding: utf-8 -*- 
import scrapy 
import json 
import re 
from scrapy.selector import Selector 

#Python 3 
#from urllib.parse import unquote 

#Python 2 
from urlparse import unquote 

class TestSOSpider(scrapy.Spider): 
    name = "testso" 
    base_url = 'http://pastebin.com' 
    #allowed_domains = ["pastebin.com"] 
    #start_urls = ['http://pastebin.com/'] 

    def start_requests(self): 
     yield scrapy.Request('http://pastebin.com/kb33dEnd', self.parse) 

    def parse(self, response): 
     self.logger.info('Main parse request - %s', response.url) 

     txt = response.css(".paste_box_line1 > h1::text").extract_first() 
     bin = response.css("#paste_code::text").extract_first()  
     bin = unquote(bin) 

     yield { 
      'txt' : txt, 
      'bin' : bin 
     } 

Before fix

後:

# -*- coding: utf-8 -*- 
import scrapy 
import json 
import re 
from scrapy.selector import Selector 

#Python 3 
#from urllib.parse import unquote 

#Python 2 
from urlparse import unquote 

class TestSOSpider(scrapy.Spider): 
    name = "testso" 
    base_url = 'http://pastebin.com' 
    #allowed_domains = ["pastebin.com"] 
    #start_urls = ['http://pastebin.com/'] 

    def start_requests(self): 
     yield scrapy.Request('http://pastebin.com/kb33dEnd', self.parse) 

    def parse(self, response): 
     self.logger.info('Main parse request - %s', response.url) 

     txt = response.css(".paste_box_line1 > h1::text").extract_first() 
     bin = response.css("#paste_code::text").extract_first() 

     bin = u' '.join((bin, '')) 
     bin = bin.encode('ascii') 
     bin = unquote(bin) 

     yield { 
      'txt' : txt, 
      'bin' : bin 
     } 

After fix

-----編輯:結束-----

+2

您似乎正在將有效的UTF-8數據打印到未配置爲UTF-8的控制檯或終端。 'unquote(special_text)'爲我生成有效的UTF-8編碼HTML。 –

+0

你可能想[強制轉換爲ASCII](http://stackoverflow.com/a/1207479/2689986)? –

+2

@AshishNitinPatil:那不會有幫助,因爲內容是中文。 –

回答

3

你的數據是完全有效的UTF-8,編碼成一個URL(所以urlencoded進行)。您的輸出表明您正在查看Mojibake,其中您自己的軟件(控制檯,終端,文本編輯器)正在使用不同的編解碼器來解釋UTF-8數據。我懷疑你的設置是用CP-1254:

>>> print text.encode('utf8').decode('sloppy-cp1254') # codec from the ftfy project 
愛迪é」 adidas Energy Boost 路跑 ä½ç­’ é‹å‹• 休閒 è·‘é‹ è·‘æ­¥ 慢跑 é¦¬æ‹‰æ¾ å¥èº«æˆ¿ æµè¡Œ çƒé‹ å¥³è£ å¥³æ¬¾ 女 å¥³é‹ 
*éˆæ´»ã€è¼•é‡ã€èˆ’é©å…¼å…·çš„é¸æ「‡ 
*簡約ç¾ä»£çš„ç」¢å「設計,年輕多樣化的é…色方案,更為符åˆå¹´è¼•æ¶ˆè²»è€…的審ç¾å好 
*簡單的線æ¢å’Œä¹¾æ·¨çš„設計,æ供了ç¨ç‰¹çš„ç©¿æ­çµ„åˆ 
*é€æ°£èˆ‡ä¿è­·æ€§,çµåˆäº†ADIDAS的創新科技,創造了完ç¾çš„ç」¢å「 

如果你不知道如何解決你的終端,我建議你將數據寫入一個文件,而不是和使用編輯器,你可以告訴編解碼器使用讀取數據:

import io 
with io.open('somefilename.txt', encoding='utf8') as f: 
    f.write(unicode_value) 

我也強烈建議您使用一個實際的HTML解析器來處理數據,而不是依賴於正則表達式。對於Python 2和3下面的代碼生成一個Unicode值從你的URL文本信息:

from bs4 import BeautifulSoup 
try: 
    from urllib import unquote 
except ImportError: 
    from urllib.parse import unquote 

soup = BeautifulSoup(unquote(special_text), 'html.parser') # consider installing lxml instead 
text = soup.get_text('\n', strip=True) # put newlines between sections 
print(text) 

您的輸入,我的Mac OSX終端上配置用於處理Unicode文本爲UTF-8,我看到:

愛迪達 adidas Energy Boost 路跑 低筒 運動 休閒 跑鞋 跑步 慢跑 馬拉鬆 健身房 流行 球鞋 女裝 女款 女 女鞋 
*靈活、輕量、舒適兼具的選擇 
*簡約現代的產品設計,年輕多樣化的配色方案,更為符合年輕消費者的審美偏好 
*簡單的線條和乾淨的設計,提供了獨特的穿搭組合 
*透氣與保護性,結合了ADIDAS的創新科技,創造了完美的產品 
+0

我已經可以通過在Mac上運行的本地環境中進行取消引號來獲得Unicode字符。問題是,當我在scrapinghub.com上運行它時,我猜是他們的環境問題?但是對於非引用的文本,它會顯示正確的中文字符。 – forestclown

+1

@forestclown:那麼scrapinghub.com如何爲您提供這些數據。在一個網頁?在一個文件中?我不知道該網站的工作原理。它當然*不是Python問題*。 –

+0

感謝您指出問題,我會嘗試使用bs4(如果我可以安裝),看看會發生什麼。爲了回答你的問題,scrapinghub允許你在瀏覽器上顯示結果或者以文本文件的形式下載,如果從unquote()轉換,則顯示亂碼,但是對於其他未使用unquote的文本顯示正常。 – forestclown

0

我不知道爲什麼,但出於某種原因,我得到它在像下面這樣的scrapinghub.com上工作。

讓說,我有一個HTML文本,如:

<html> 
<div class="a"> 
    Some chinese text 
</div> 
<div class="b"> 
    QUOTED text got chinese in it 
    %3Ctable%20width%3D%22100%25%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%3Ctd%3E%3Cp%20style%3D%22color%3A%23ff0000%3Bfont-size%3A20pt%3Btext-align%3Acenter%3Bfont-weight%3Abold%22%3E%0D%0A%09%E6%84%9B%E8%BF%AA%E9%81%94%20adidas%20Energy%20Boost%20%E8%B7%AF%E8%B7%91%20%E4%BD%8E%E7%AD%92%20%E9%81%8B%E5%8B%95%20%E4%BC%91%E9%96%92%20%E8%B7%91%E9%9E%8B%20%E8%B7%91%E6%AD%A5%20%E6%85%A2%E8%B7%91%20%E9%A6%AC%E6%8B%89%E6%9D%BE%20%E5%81%A5%E8%BA%AB%E6%88%BF%20%E6%B5%81%E8%A1%8C%20%E7%90%83%E9%9E%8B%20%E5%A5%B3%E8%A3%9D%20%E5%A5%B3%E6%AC%BE%20%E5%A5%B3%20%E5%A5%B3%E9%9E%8B%0D%0A%3C%2Fp%3E%0D%0A%3C%2Ftd%3E%3C%2Ftr%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%3Ctd%3E%3Cp%20style%3D%22color%3A%23000000%3Bfont-size%3A14pt%3Btext-align%3Acenter%22%3E%0D%0A%09%EF%BC%8A%E9%9D%88%E6%B4%BB%E3%80%81%E8%BC%95%E9%87%8F%E3%80%81%E8%88%92%E9%81%A9%E5%85%BC%E5%85%B7%E7%9A%84%E9%81%B8%E6%93%87%3Cbr%20%2F%3E%EF%BC%8A%E7%B0%A1%E7%B4%84%E7%8F%BE%E4%BB%A3%E7%9A%84%E7%94%A2%E5%93%81%E8%A8%AD%E8%A8%88%2C%E5%B9%B4%E8%BC%95%E5%A4%9A%E6%A8%A3%E5%8C%96%E7%9A%84%E9%85%8D%E8%89%B2%E6%96%B9%E6%A1%88%2C%E6%9B%B4%E7%82%BA%E7%AC%A6%E5%90%88%E5%B9%B4%E8%BC%95%E6%B6%88%E8%B2%BB%E8%80%85%E7%9A%84%E5%AF%A9%E7%BE%8E%E5%81%8F%E5%A5%BD%3Cbr%20%2F%3E%EF%BC%8A%E7%B0%A1%E5%96%AE%E7%9A%84%E7%B7%9A%E6%A2%9D%E5%92%8C%E4%B9%BE%E6%B7%A8%E7%9A%84%E8%A8%AD%E8%A8%88%2C%E6%8F%90%E4%BE%9B%E4%BA%86%E7%8D%A8%E7%89%B9%E7%9A%84%E7%A9%BF%E6%90%AD%E7%B5%84%E5%90%88%3Cbr%20%2F%3E%EF%BC%8A%E9%80%8F%E6%B0%A3%E8%88%87%E4%BF%9D%E8%AD%B7%E6%80%A7%2C%E7%B5%90%E5%90%88%E4%BA%86ADIDAS%E7%9A%84%E5%89%B5%E6%96%B0%E7%A7%91%E6%8A%80%2C%E5%89%B5%E9%80%A0%E4%BA%86%E5%AE%8C%E7%BE%8E%E7%9A%84%E7%94%A2%E5%93%81%3Cbr%20%2F%3E%0D%0A%3C%2Fp%3E%0D%0A%3C%2Ftd%3E%3C%2Ftr%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%3Ctd%3E%3Cdiv%20align%3D%22center%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fs.yimg.com%2Fwb%2Fimages%2F2B558E585E39649599A9A266349EABD17A4ABC18%22%20%2F%3E%3C%2Fdiv%3E%3C%2Ftd%3E%3C%2Ftr%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Ftable%3E%3Ctable%20width%3D%22100%25%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%3Ctd%3E%3Cp%20style%3D%22color%3A%23000000%3Bfont-size%3A12pt%3Btext-align%3Aleft%3Bfont-weight%3A100%22%3E%0D%0A%09%0D%0A%3C%2Fp%3E%0D%0A%3C%2Ftd%3E%3C%2Ftr%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%3Ctd%3E%3Cdiv%20align%3D%22center%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fs.yimg.com%2Fwb%2Fimages%2F0F1A6CBFE6F6631189D491A17A2A2E7C388F194E%22%20%2F%3E%3Cdiv%3E%3C%2Ftd%3E%3C%2Ftr%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%3Ctd%3E%3C%2Ftd%3E%3C%2Ftr%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Ftable%3E%3Ctable%20width%3D%22100%25%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%3Ctd%3E%3Cp%20style%3D%22color%3A%23000000%3Bfont-size%3A12pt%3Btext-align%3Aleft%3Bfont-weight%3A100%22%3E%0D%0A%09%0D%0A%3C%2Fp%3E%0D%0A%3C%2Ftd%3E%3C%2Ftr%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%3Ctd%3E%3Cdiv%20align%3D%22center%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fs.yimg.com%2Fwb%2Fimages%2FA0C9B09CAC784E2CA81A572E8F9F2E5721812607%22%20%2F%3E%3Cdiv%3E%3C%2Ftd%3E%3C%2Ftr%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%3Ctd%3E%3C%2Ftd%3E%3C%2Ftr%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Ftable%3E 
</div> 
</html> 

所以我分析它類= 「一個」 變量AAA的class = 「B」 分配給變量BBB

如果我想對所享有BBB,並有中國漢字正確顯示我做到以下幾點:

BBB = u' '.join((BBB, '')) 
BBB = BBB.encode('ascii') 
BBB = unquote(BBB) 

所以,當我同時輸出AAA & BBB上scrapinghub,它都將顯示中國文字correctl年。

我只想指出,Martijn Pieters在他的答案中也是正確的,當我在我的MAC上進行本地化時。但只是不知道在scrapinghub發生了什麼,我需要做到上述。

+1

你的'u''.join()'調用是一種非常詳細的方式,在BBB結尾添加一個空格,而不是肯定你爲什麼這樣做。至於scrapinghub.com,你有沒有試過聯繫他們的支持,詢問他們如何確定編解碼器?我強烈懷疑他們正在使用編碼的自動檢測(這可能很容易失敗)。 –

+0

scrapinghub正在使用Scrapy庫(pip安裝Scrapy)從CSS獲取文本,因此要從class =「b」獲取文本,需要執行BBB = response.css(「div.b」),其中響應存儲整個HTML 。如果我簡單地做BBB.encode(),它會給我「TypeError:不能在類似字節的對象上使用字符串模式」,所以我讀某處做BBB = u''.join(BBB,'')) – forestclown

+1

哦,親愛的。所以它會**解碼爲Unicode,如果它尚未。 '如果不是isinstance(BBB,unicode):BBB = BBB.decode('ASCII')'將是一個更明確的方法,而不必事先猜測它想做什麼。 –

相關問題