2012-07-11 39 views
20

Các yêu cầu và tôi đang sử dụng API yêu cầu thư viện Diffbot để truy vấn các nội dung của để có được một bài báo từ một URL của trang web. Khi tôi đến thăm một URL yêu cầu đó tôi tạo ra trong trình duyệt của tôi, nó sẽ trả về một đối tượng JSON với văn bản trong Unicode (? Phải) Ví dụ (I shortended văn bản hơi):Python Unicode

{ "biểu tượng": "http : //mexico.cnn.com/images/ico_mobile.jpg "" văn bản ":" Ciudad de Mexico (CNNMéxico) \ u2014 Kassandra Cano Guazo là 32, nhưng chủ nhật đầu tiên tham gia một cuộc bầu cử \. n \ "có có (chứng chỉ) IFE (Viện Bầu cử Liên bang) của tôi bởi vì làm cho quá trình có nhiều chế nhạo khi họ nhìn thấy tên của bạn không phù hợp các tài liệu khác của bạn và theo bản sắc mới của họ. \ nSánchez ông nói rằng ứng viên không được phân biệt đối xử hai, nhưng kinh nghiệm là khác nhau Kassanda: \ "bạn phải trả tiền một luật sư, hai chuyên gia (trong đó có một nội tiết). Bên cạnh đó, tuyên án thẩm phán cho việc thay đổi tên và nếu nó không phải là thuận lợi phải chờ bốn năm để tái kiện đăng ký \ dân sự". \ Nante tình huống này, Hội đồng ngăn ngừa và hạn chế sculina, các chuyển giới bỏ phiếu - Mexico: Vote 2012 - quốc gia "" url ":" http://mexico.cnn.com/nacional/2012/07/02/con-apariencia-de-mujer-e-identidad-masculina- the-xuyên bỏ phiếu "" xpath ""/HTML [1]/BODY [1]/PHẦN [5]/DIV [1]/ĐIỀU [1]/DIV [1]/DIV [6] "}

Khi tôi sử dụng theo yêu cầu thư viện python như sau:

def get_article(self, params={}): 
    api_endpoint = 'http://www.diffbot.com/api/article' 
    params.update({ 
    'token': self.dev_token, 
    'format': self.output_format, 
    }) 
    req = requests.get(api_endpoint, params=params) 
    return json.loads(req.content) 

Nó trả này (một lần nữa lưu ý các văn bản đó tôi rút ngắn hơi):

{u'url ': u'http: //mexico.cnn.com/nacional/2012/07/02/ với-mạo-of-nữ-e-sắc-nam-the-chuyển giới-bỏ phiếu ' u'text': u'CIUDAD M \ xc9XICO (CNNM \ xe9xico) \ u2014 Kassandra Guazo Cano có 32 \ xf1os nhưng hôm chủ nhật tham gia \ xf3 đầu tiên trong một sự lựa chọn \ xf3n \ n "Không hab \ Xeda nhận của tôi (credential) IFE (Viện Bầu cử Liên bang) vì hacOyuky Mart \ xednez Col \ xedn, cũng \. xe9n transg \ xe9nero, và được đi kèm với \ xf1ada của hai con trai của ông 012.351.và mắm \ XE1. \ Nambas làm việc như các nhà hoạt động trong Trung Tâm Hỗ Trợ Trans Identities, BC, nơi họ tham gia vào một chiến dịch \ xf1a của phòng \ xf3n các bệnh tình dục. \ N "Kishi \ xe9ramos rằng không chỉ nhìn thấy chúng tôi như mại dâm hay nhà tạo mẫu, nhưng đấu tranh cho quyền của chúng tôi, "Kassandra trong khi nụ cười \ xede nói, giơ cử tri của mình và đặt ra ngón tay cái ký 'u'title'. u'Con xuất hiện danh tính nữ và nam giới, transg \ xe9nero bỏ phiếu - M \ xe9xico: Vote 2012 - Quốc gia 'u'xpath': u '/ HTML [1]/BODY [1]/PHẦN [5]/DIV [1]/ĐIỀU [1]/DIV [1]/DIV [6] ' u'icon': u'http: //mexico.cnn.com/images/ico_mobile.jpg '}

012.

tôi không khá Hiểu Unicode. Làm thế nào để chắc chắn rằng tôi Get Với ​​Đó là những gì vẫn là yêu cầu Unicode?

+0

Dường như bạn có chuỗi unicode trong kết quả json đó. Lưu ý ký hiệu "u '...'"? Bạn cũng có thể kiểm tra kiểu của một số kết quả: 'type (result ['text'])'. http://docs.python.org/howto/unicode.html – istruble

+0

Cảm ơn! Tôi thấy nó là unicode thực sự với u '', tuy nhiên nó nói prevenci \ xf3n (khi sử dụng yêu cầu) thay vì preferiría (trong trình duyệt) chẳng hạn. Làm thế nào tôi có thể làm cho nó mà prevenci \ xf3n là preferiría? – Javaaaa

+1

Đó chỉ là cú pháp chữ bằng chuỗi cũ. Python hiển thị cho bạn '\ xc9' vì nó an toàn để in trên tất cả các bàn điều khiển, trong khi' É' sẽ thất bại trên các bảng điều khiển không hỗ trợ Unicode đúng cách. Nếu bàn điều khiển của bạn đang hoạt động, bạn có thể thấy chúng giống nhau. '>>> u'CIUDAD DE M \ xc9XICO '== u'CIUDAD DE MÉXICO'' là True. – bobince

Trả lời

34

Bạn có thể sử dụng req.text thay vì req.content để đảm bảo bạn nhận được Unicode. Các phương pháp được mô tả trong:

http://docs.python-requests.org/en/latest/api/#main-interface

+2

có cách nào để không nhận được phản hồi JSON unicode với Yêu cầu không? Nó có vẻ như cách duy nhất để in ra một phản ứng JSON đến thiết bị đầu cuối mà không có unicode là để in JSON như một chuỗi, nhưng sau đó tất nhiên nó không phải là một cấu trúc dữ liệu nữa, chỉ là một chuỗi. Có cách nào để đối phó với yêu cầu phản ứng như "tinh khiết" JSON vẫn là một cấu trúc dữ liệu nhưng không có Unicode? – AdjunctProfessorFalcon

+2

NB: Trong một số trường hợp, cần phải thực hiện 'response.content.decode ('utf-8')' để chuyển đổi các byte thô thành UTF-8. –

11

Liên quan đến việc "Tôi hoàn toàn không hiểu unicode" có một entertaining primer bởi Joel Spolsky trên Unicode và chính thức Python Unicode HowTo Đó là 10 phút đọc và bao gồm mọi thứ Python cụ thể.

requests docs cho biết yêu cầu đó sẽ luôn trả về mã unicode và nội dung ví dụ bạn đã đăng thực tế là unicode (chú ý cú pháp chuỗi u''? Đó là cú pháp của Python đối với chuỗi unicode.), Vì vậy không có vấn đề gì. Lưu ý rằng nếu bạn xem phản hồi JSON trong trình duyệt web, thì u'' sẽ không có ở đó vì đó là thuộc tính về cách Python lưu trữ chuỗi.

Nếu unicode quan trọng đối với ứng dụng của bạn, vui lòng không cố gắng đối phó mà không thực sự biết về unicode. Bạn đang ở trong một thế giới của đau khổ, các vấn đề thiết lập nhân vật là cực kỳ bực bội để gỡ lỗi nếu bạn không biết những gì bạn đang làm. Đọc cả hai bài báo nói trên có thể mất nửa giờ.

+1

Thêm vào các liên kết này Trình bày tuyệt vời của Ned Batchelder trên Pragmatic Unicode bằng Python: http://nedbatchelder.com/text/unipain.html – bgporter

+0

Cảm ơn! Tôi thấy nó là unicode thực sự với u '', tuy nhiên nó nói prevenci \ xf3n (khi sử dụng yêu cầu) thay vì preferiría (trong trình duyệt) chẳng hạn. Làm thế nào tôi có thể làm cho nó mà prevenci \ xf3n là preferiría? – Javaaaa

+0

Python sử dụng chuỗi thoát như '\ xf3' cho mỗi ký tự không phải ASCII khi * hiển thị * một chuỗi unicode. Nhìn vào các bảng xếp hạng Unicode tại http://www.unicode.org/charts/, bạn sẽ thấy nó là "ó", vì vậy nó ổn cả. Nếu bạn muốn xem các ký tự thực tế, bạn sẽ cần phải mã hóa chuỗi unicode. – Simon

Các vấn đề liên quan