Tôi đang cố lấy tiêu đề từ một trang web, mã hóa nó trong JSON để viết nó vào một tệp. Tôi đã thử hai cách khác nhau mà không thành công.Lấy tiêu đề bằng Python và chuyển đổi bằng JSON (yêu cầu - urllib2 - json)
FIRST với urllib2 và json
import urllib2
import json
host = ("https://www.python.org/")
header = urllib2.urlopen(host).info()
json_header = json.dumps(header)
print json_header
theo cách này tôi nhận được lỗi:
TypeError: is not JSON serializable
Vì vậy, tôi cố gắng để vượt qua vấn đề này bằng cách chuyển đổi các đối tượng thành một chuỗi -> json_header = str (tiêu đề) Bằng cách này tôi có thể json_header = json.dumps (tiêu đề) nhưng đầu ra nó lạ:
"Date: Wed, 02 Jul 2014 13:33:37 GMT\r\nServer: nginx\r\nContent-Type: text/html; charset=utf-8\r\nX-Frame-Options: SAMEORIGIN\r\nContent-Length: 45682\r\nAccept-Ranges: bytes\r\nVia: 1.1 varnish\r\nAge: 1263\r\nX-Served-By: cache-fra1220-FRA\r\nX-Cache: HIT\r\nX-Cache-Hits: 2\r\nVary: Cookie\r\nStrict-Transport-Security: max-age=63072000; includeSubDomains\r\nConnection: close\r\n"
THỨ HAI với yêu cầu
import requests
r = requests.get(“https://www.python.org/”)
rh = r.headers
print rh
{'content-length': '45682', 'via': '1.1 varnish', 'x-cache': 'HIT', 'accept-ranges': 'bytes', 'strict-transport-security': 'max-age=63072000; includeSubDomains', 'vary': 'Cookie', 'server': 'nginx', 'x-served-by': 'cache-fra1226-FRA', 'x-cache-hits': '14', 'date': 'Wed, 02 Jul 2014 13:39:33 GMT', 'x-frame-options': 'SAMEORIGIN', 'content-type': 'text/html; charset=utf-8', 'age': '1619'}
Bằng cách này, đầu ra là JSON giống như nhưng vẫn không OK (xem ‘‘thay cho ““và các công cụ khác như = và;). Rõ ràng có điều gì đó (hoặc rất nhiều) tôi không làm đúng cách. Tôi đã cố gắng đọc tài liệu về các mô-đun nhưng tôi không thể hiểu cách giải quyết vấn đề này. Cảm ơn sự giúp đỡ của bạn.
Cảm ơn bạn rất nhiều @Slater Tyranus. Phương pháp thứ hai của bạn chính xác là những gì tôi đang tìm kiếm. Chỉ một câu hỏi tò mò. Đọc đầu ra của phương thức đầu tiên của bạn Tôi thấy rằng các khóa và giá trị nằm bên trong ''. Tại sao json.dumps làm điều đó trong trường hợp đó? Định dạng JSON hợp lệ có giá trị bên trong "" không? –