Trích xuất dữ liệu từ đối tượng Python

Tôi cho rằng điều tương tự cũng có thể xảy ra khi trích xuất các giá trị từ các cấu trúc JSON lồng nhau. Ngay cả những lập trình viên lành nghề nhất cũng có thể rơi nước mắt khi làm việc với một đối tượng JSON bao gồm sự kết hợp của các cấu trúc dữ liệu được lồng sâu. Quá trình trích xuất các giá trị có thể cảm thấy lộn xộn và vô tổ chức nhất. Càng nhiều dữ liệu, mớ hỗn độn càng lớn

Khóa học được tạo bởi Tác giả

Trong hướng dẫn này, tôi sẽ hướng dẫn bạn phương pháp từng bước để trích xuất các giá trị bạn cần từ bất kỳ JSON nào. Một lời cảnh báo. hướng dẫn này không dành cho người mới sử dụng JSON, danh sách hoặc từ điển. Nếu bạn chưa bao giờ nghe nói về chỉ mục danh sách hoặc cặp khóa-giá trị từ điển, tôi khuyên bạn nên xem lại một trong nhiều hướng dẫn tuyệt vời có sẵn trên web hoặc YouTube. Khi bạn cảm thấy thoải mái hơn với chủ đề này, hãy quay lại để tiếp tục học hỏi và phát triển

dọn phòng

JSON so với. Danh sách so với. từ điển

Điều đầu tiên, khi nói đến các thuật ngữ “JSON”, “danh sách” và “từ điển”, chúng ta phải thực hiện một số công việc vệ sinh quan trọng. JSON hoặc Ký hiệu đối tượng JavaScript, là một định dạng rộng hơn được sử dụng để bao gồm các cấu trúc danh sách và từ điển như trong hình bên dưới

JSON. Danh sách và cấu trúc từ điển, hình ảnh của tác giả

Tài liệu kỹ thuật cho biết một đối tượng JSON được xây dựng trên hai cấu trúc. danh sách các cặp khóa-giá trị và danh sách giá trị được sắp xếp theo thứ tự. Trong Lập trình Python, cặp khóa-giá trị là đối tượng từ điển và danh sách có thứ tự là đối tượng danh sách. Trong thực tế, điểm bắt đầu để trích xuất dữ liệu lồng nhau bắt đầu bằng cấu trúc dữ liệu từ điển hoặc danh sách. Khi trích xuất Dữ liệu lồng nhau, [các] câu hỏi phải là. Dữ liệu có được lồng trong cấu trúc dữ liệu Từ điển hoặc Danh sách không?

“Từ lâu, tôi đã có một châm ngôn rằng những điều nhỏ bé vô cùng quan trọng nhất. " - Sir Arthur Conan Doyle,

Nếu có vẻ như tôi đang làm to chuyện về thuật ngữ, thì đó là bởi vì tôi. Khi nói đến việc trích xuất dữ liệu lồng nhau, vấn đề chi tiết. Cấu trúc dữ liệu thay đổi dữ liệu được lồng sâu hơn trong cấu trúc JSON và biết những điểm khác biệt đó là rất quan trọng. Cấu trúc dữ liệu ban đầu có thể là một danh sách nhưng sau đó thay đổi thành từ điển khi dữ liệu được trích xuất. Chìa khóa để trích xuất dữ liệu từ một đối tượng JSON là nhận ra sự kết hợp của các cấu trúc dữ liệu được sử dụng để lưu trữ dữ liệu. Nếu bạn gặp khó khăn trong việc nhận ra cấu trúc dữ liệu trong một đối tượng JSON, thì có khả năng là bạn sẽ gặp khó khăn trong việc trích xuất các giá trị mà bạn muốn. Trong hầu hết các trường hợp, điều này dẫn đến việc áp dụng sai kỹ thuật chiết xuất

Bảng bên dưới là phần giới thiệu ngắn gọn về các kỹ thuật được sử dụng để trích xuất dữ liệu từ cấu trúc JSON

Các loại dữ liệu và phương pháp trích xuất, hình ảnh của tác giả

Một lưu ý cuối cùng trước khi bắt đầu ví dụ của chúng tôi. Trong Lập trình Python, thuật ngữ “cấu trúc dữ liệu” hiếm khi được sử dụng khi mô tả danh sách và từ điển. Thuật ngữ thường được sử dụng là “kiểu dữ liệu”. Tôi sử dụng thuật ngữ kiểu dữ liệu và cấu trúc dữ liệu thay thế cho nhau trong suốt hướng dẫn này. Tôi sử dụng thuật ngữ cấu trúc dữ liệu vì nó truyền đạt ý tưởng rằng cấu trúc dữ liệu là các khối xây dựng cơ bản của đối tượng JSON. Việc sử dụng thuật ngữ kiểu dữ liệu trong Python không kém phần quan trọng tuy nhiên nó không truyền đạt ý nghĩa giống như một chìa khóa để hiểu việc trích xuất dữ liệu lồng nhau

Dữ liệu thế giới thực

Bắt đầu nào

Một trong những cách tốt nhất để học là làm việc thông qua dữ liệu thực với sự kết hợp của cấu trúc dữ liệu danh sách và từ điển. Trong hướng dẫn này, chúng tôi sẽ sử dụng dữ liệu thực từ. API này trả về khoảng 250 bản ghi với sự kết hợp của từ điển, danh sách và các loại dữ liệu khác. Mục tiêu của chúng tôi là trích xuất giá trị 'AFN’ từ cặp khóa-giá trị từ điển 'code':'AFN' như trong hình bên dưới. 'AFN' được lồng trong hai cấu trúc danh sách và một cấu trúc từ điển

Dữ liệu API của các quốc gia REST, Hình ảnh của tác giả

Mã mẫu

Nhấp vào liên kết này sẽ cho phép bạn truy cập mã mẫu trong các ví dụ sau. Liên kết sẽ đưa bạn đến một khóa học mà tôi đã phát triển để học cách trích xuất dữ liệu JSON lồng nhau. Khóa học đã giúp hàng trăm học viên học bóc tách dữ liệu lồng nhau. Bạn không cần phải mua khóa học để có được các tập tin. Tên tệp là single_json. py và multiple_json. py

Trích xuất các mục đơn lẻ

Trong ví dụ này, chúng tôi sẽ bắt đầu bằng cách trích xuất dữ liệu bằng cách sử dụng kết hợp các kỹ thuật trích xuất danh sách và từ điển như trong bảng trước. Trong mã Python bên dưới, tôi bắt đầu bằng cách cung cấp logic để nhập dữ liệu, giải pháp và sau đó là quy trình làm việc để đưa ra giải pháp. Tôi khuyên bạn nên làm theo tất cả các bước như hình bên dưới. Các bước quy trình công việc được giải thích bên dưới mã Python

Mã Python

Các bước quy trình làm việc

  • Step 1: import requests. dòng này nhập thư viện Yêu cầu HTTP cho Python. Đó là thư viện chúng tôi sử dụng để kết nối với API Restful. Nếu bạn chưa cài đặt nó, bạn có thể cài đặt nó từ dấu nhắc lệnh hoặc môi trường ảo bằng cách sử dụng lệnh yêu cầu cài đặt pip
  • Step 2: url = '//restcountries.eu/rest/v2/all' dòng này lưu trữ địa chỉ web cho API REST. Địa chỉ được lưu trong biến url
  • Step 3: response = requests.get[url]. phương pháp này được sử dụng để kết nối với Restful API, https. //các nước còn lại. eu/rest/v2/all, để trích xuất dữ liệu. Dữ liệu trả về được lưu trữ trong biến response. Về mặt kỹ thuật, đây được gọi là đối tượng phản hồi
  • Step 4: storage = response.json[]trả về một đối tượng JSON của kết quả [nếu kết quả được viết ở định dạng JSON, nếu không, nó sẽ phát sinh lỗi]. Hãy nghĩ về .json[] như một định dạng lưu trữ được sử dụng để trao đổi dữ liệu. Trong trường hợp này, chúng tôi lưu trữ nội dung trong biến 'code':'AFN'0
  • 'code':'AFN'1. điều này trả về kiểu dữ liệu Python được sử dụng để lưu trữ dữ liệu. Trong trường hợp này, kiểu dữ liệu được trả về sẽ là một danh sách [ 'code':'AFN'2]. Nhìn lại bảng tôi đã cung cấp trước đó, dữ liệu có thể được trích xuất bằng cách sử dụng chỉ mục danh sách [0,,…]. Bạn phải luôn sử dụng hàm 'code':'AFN'3 để xác định loại dữ liệu. Nếu bạn biết loại dữ liệu, bạn sẽ biết kỹ thuật trích xuất chính xác để sử dụng
  • 'code':'AFN'4. điều này cung cấp số lượng các mục trong danh sách. Mỗi số đại diện cho chỉ mục của một mục trong danh sách và chỉ mục có thể được sử dụng để trích xuất giá trị
  • 'code':'AFN'5. số 0 đại diện cho mục đầu tiên trong danh sách VÀ được sử dụng để trích xuất mục đó khỏi danh sách. Sau khi mục được trích xuất, một loại dữ liệu mới hiện được hiển thị. Hàm 'code':'AFN'3 ở bước 8 được sử dụng để hiển thị kiểu dữ liệu
  • 'code':'AFN'7. kiểu dữ liệu mới sẽ là 'code':'AFN'8. Từ điển có nghĩa là dữ liệu có thể được trích xuất bằng khóa. Trong dữ liệu của chúng tôi, khóa được sử dụng để trích xuất giá trị là 'code':'AFN'9. Phím 'code':'AFN'9 được sử dụng ở bước 9. Lưu ý, loại dữ liệu đã thay đổi từ 'code':'AFN'2 ở bước 5 thành 'AFN'2 ở bước 8
  • 'AFN'3. khóa 'code':'AFN'9 trong từ điển được sử dụng để xuất ra 'AFN'5. Sau khi mục được trích xuất, một loại dữ liệu mới hiện được hiển thị. Hàm 'code':'AFN'3 ở bước 10 được sử dụng để hiển thị kiểu dữ liệu
  • 'AFN'7. kiểu dữ liệu mới sẽ là 'AFN'8. Kiểu dữ liệu danh sách có nghĩa là chúng tôi sử dụng toán tử chỉ mục 'AFN'9 để trích xuất tập giá trị tiếp theo. Trong trường hợp này, giá trị chỉ mục sẽ là 0. Vì vậy, chúng tôi sử dụng nó trong bước 11. Lưu ý, loại dữ liệu đã thay đổi từ 'AFN'2 ở bước 8 thành 'code':'AFN'2 ở bước 10
  • Step 1: import requests2. chỉ sốStep 1: import requests3 được sử dụng để xuất Step 1: import requests4. Sau khi mục được trích xuất, một loại dữ liệu mới hiện được hiển thị. Hàm 'code':'AFN'3 ở bước 12 được sử dụng để hiển thị kiểu dữ liệu
  • Step 1: import requests6. kiểu dữ liệu mới là'AFN'2. Từ điển có nghĩa là dữ liệu có thể được trích xuất bằng một khóa. Trong dữ liệu của chúng tôi, khóa được sử dụng để trích xuất giá trị là Step 1: import requests8. Phím Step 1: import requests8 được sử dụng ở bước 13
  • Step 2: url = '//restcountries.eu/rest/v2/all'0. Khóa Step 1: import requests8 được sử dụng để xuất Step 2: url = '//restcountries.eu/rest/v2/all'2, đây là giá trị mà chúng tôi đang tìm kiếm để xuất

Vì vậy, hãy tóm tắt hai bước được lặp lại cho đến khi chúng tôi đạt được giá trị mà chúng tôi muốn trích xuất. Bước đầu tiên là xác định kiểu dữ liệu và bước thứ hai là áp dụng phương pháp trích xuất. Nếu kiểu dữ liệu là danh sách, thì hãy sử dụng toán tử chỉ mục với dấu ngoặc vuông. Tuy nhiên, nếu kiểu dữ liệu là từ điển, hãy sử dụng khóa từ điển có dấu ngoặc nhọn

Trích xuất nhiều mục

Mặc dù trích xuất một mục danh sách từ cấu trúc JSON là bước đầu tiên quan trọng, nhưng việc chỉ trích xuất một giá trị đơn lẻ là điều không phổ biến. Trong dữ liệu trong thế giới thực, các giá trị trong đối tượng JSON được lưu trữ dưới dạng bộ sưu tập. Trong hình ảnh bên dưới, các khóa và giá trị từ điển 'code':'AFN'9 và Step 1: import requests8 có nhiều mục nhập trong cấu trúc dữ liệu danh sách. Ví dụ trong thế giới thực của chúng tôi, có 250 mục trong số này, vì vậy mục tiêu của chúng tôi trong phần hướng dẫn này sẽ là trích xuất những mục này và các giá trị còn lại

Dữ liệu API của các quốc gia REST, Hình ảnh của tác giả

May mắn thay, chúng tôi có thể trích xuất các giá trị này bằng cách xây dựng dựa trên các bước quy trình công việc mà chúng tôi đã sử dụng để trích xuất một giá trị duy nhất từ ​​cấu trúc JSON. Tôi sẽ không liệt kê lại các bước đó. Vì cấu trúc dữ liệu danh sách và từ điển có thể lặp lại nên chúng ta có thể sử dụng cấu trúc Step 2: url = '//restcountries.eu/rest/v2/all'5 để duyệt qua các giá trị của mình. Vì vậy, hãy thêm nó vào mã của chúng ta ở bước 14. Chúng ta cũng sẽ cần sử dụng các hàm Step 2: url = '//restcountries.eu/rest/v2/all'6 và Step 2: url = '//restcountries.eu/rest/v2/all'7 để liệt kê số lượng mục trong danh sách. Các bước quy trình công việc được giải thích bên dưới mã Python

Mã Python

Các bước quy trình làm việc

Step 2: url = '//restcountries.eu/rest/v2/all'8 Biến Step 2: url = '//restcountries.eu/rest/v2/all'9 chứa danh sách 'code':'AFN'2được trả về ở Bước 4. Hàm Step 2: url = '//restcountries.eu/rest/v2/all'7 được sử dụng để đếm số lượng mục trong danh sách. Hàm Step 2: url = '//restcountries.eu/rest/v2/all'6 tạo ra một chuỗi các số dựa trên số mục trong danh sách. Số này được chuyển đến biến url3 mỗi khi ___________5 lặp qua danh sách Step 2: url = '//restcountries.eu/rest/v2/all'9. Trong dòng 48, url6 hiển thị ở bước 14 đến từ bước 13. Chúng tôi đã đặt nó trong cấu trúc Step 2: url = '//restcountries.eu/rest/v2/all'5 và sửa đổi mã từ url8 → url9. url8 tham chiếu đến một mục duy nhất trong danh sách. Tuy nhiên, url9 nắm bắt nhiều mục trong danh sách Step 2: url = '//restcountries.eu/rest/v2/all'9. Mỗi lần Step 2: url = '//restcountries.eu/rest/v2/all'5 lặp lại, url9 được tăng lên để nắm bắt tập hợp giá trị tiếp theo

Phần kết luận

Quá trình khai quật dữ liệu lồng nhau đôi khi có thể cảm thấy khó khăn, vòng vo và bực tức. Bản thân nó không dễ dàng sử dụng các kỹ thuật giới thiệu như lặp đi lặp lại Step 3: response = requests.get[url]5. Chắc chắn, sự phức tạp của cấu trúc JSON đòi hỏi phải xen kẽ giữa nhiều từ điển và kỹ thuật trích xuất danh sách để trích xuất dữ liệu. Để hiểu rõ về nó đòi hỏi một quá trình lặp đi lặp lại nhưng quan trọng hơn là thực hành. Tôi đã bao gồm một số vấn đề thực hành bổ sung với các giải pháp [bấm vào đây]

Làm cách nào để trích xuất dữ liệu trong Python?

Để trích xuất dữ liệu bằng cách sử dụng quét web với python, bạn cần làm theo các bước cơ bản sau. .
Tìm URL mà bạn muốn cạo
Kiểm tra Trang
Tìm dữ liệu bạn muốn trích xuất
Viết mã
Chạy mã và giải nén dữ liệu
Lưu trữ dữ liệu ở định dạng cần thiết

__ dict __ trong Python là gì?

Tất cả đối tượng trong Python đều có thuộc tính __dict__, là đối tượng từ điển chứa tất cả các thuộc tính được xác định cho chính đối tượng đó . Việc ánh xạ các thuộc tính với các giá trị của nó được thực hiện để tạo từ điển.

Chủ Đề