Cách trích xuất dữ liệu hiệu quả từ tệp XML bằng mã python đơn giản ở dạng dễ thao tác
XML [Extensible Markup Language] là một ngôn ngữ đánh dấu rất giống với HTML [Hypertext Markup Language]. XML được sử dụng để cấu trúc dữ liệu để vận chuyển và lưu trữ. Nó sử dụng văn bản và thẻ để mô tả các thành phần trong một tệp. Các tệp XML là một loại dữ liệu bán cấu trúc
Khi làm việc trên một dự án cá nhân bằng Python, tôi nhận thấy cần phải trích xuất dữ liệu từ các tệp XML thành các định dạng phù hợp như CSV. Làm việc với dữ liệu ở các định dạng như vậy sẽ dễ dàng hơn. Sau đây là một cách đơn giản mà tôi đã sử dụng để hoàn thành nhiệm vụ
Làm cách nào để diễn giải dữ liệu trong tệp XML?
Trên đây là một phần của tệp XML mà chúng tôi sẽ sử dụng để trích xuất dữ liệu. Bạn có thể tải xuống tệp gốc từ Kaggle
This file has records for jobs in the UK, each with certain fields of information such as job title, job description, etc. A pre-requisite for this method is that we need to know the structure of the XML file. Here the is used to mention a unique ID for the record. , , , etc. tags contain the descriptive values for every job referred to by the current unique ID.
1. Nhập các thư viện python cần thiếtimport pandas as pd
import numpy as npimport xml.etree.cElementTree as et
chúng tôi sẽ sử dụng gói xml mà từ đó chúng tôi nhập etree. cElementTree là 'et' để làm việc đơn giản. 'Phần tử' là một đối tượng chứa linh hoạt được sử dụng để lưu trữ các cấu trúc dữ liệu phân cấp trong bộ nhớ
2. Phân tích cú pháp tệp XMLtree=et.parse['/content/drive/My Drive/Colab Notebooks/Monster_UK_Jobs/monster_uk-job_sample.xml']root=tree.getroot[]
Sử dụng et. parse[] chúng tôi phân tích tệp XML thành đối tượng 'cây' [Thay thế đường dẫn tệp bằng đường dẫn đến tệp XML của bạn]. Quá trình phân tích tệp của chúng tôi sẽ bắt đầu từ gốc của cây. Sử dụng. getroot[], chúng ta lấy gốc của cây được phân tích cú pháp. Bây giờ chúng ta có thể sử dụng root để lặp qua tệp của mình
We can observe the structure of our XML file and determine the fields that are associated with each record. These fields are nothing but the values in tags like , , , etc in our case. To store the extracted data, we create empty lists for each such tag value/field.
Timestamp = []
URL = []
Job_Title = []
Category = []
Company_Name = []
City = []
Post_Date = []
Job_Description = []
Company_Description = []
Job_Board = []
Geo = []
Location = []
4. Chuyển đổi dữ liệuBây giờ bằng cách sử dụng thư mục gốc, chúng tôi lặp qua tệp của mình và lưu trữ các giá trị trong danh sách mà chúng tôi đã tạo ở bước trước
for time in root.iter['crawl_timestamp']:
print[time.text]
print["step1"]
Timestamp.append[time.text]for url in root.iter['url']:
print[url.text]
print["step2"]
URL.append[url.text]for title in root.iter['job_title']:
print["step3"]
Job_Title.append[title.text]for cat in root.iter['category']:
print["step4"]
Category.append[cat.text]for cname in root.iter['company_name']:
print["step5"]
Company_Name.append[cname.text]for ct in root.iter['city']:
print["step6"]
City.append[ct.text]for pdate in root.iter['post_date']:
print["step7"]
Post_Date.append[pdate.text]for jd in root.iter['job_description']:
print["step8"]
Job_Description.append[jd.text]for cd in root.iter['company_description']:
print["step9"]
Company_Description.append[cd.text]for job_bd in root.iter['job_board']:
print["step10"]
Job_Board.append[job_bd.text]for go in root.iter['geo']:
print["step11"]
Geo.append[go.text]for loc in root.iter['location']:
print["LAST STEP"]
Location.append[loc.text]
Sử dụng gốc. iter[‘__’] bằng cách điền giá trị cho từng trường/thẻ tương ứng, chúng ta có thể viết vòng lặp for riêng cho từng trường. Tôi đã thêm một câu lệnh in trong mỗi vòng lặp for để hiểu luồng quy trình trong quá trình thực thi
Hiện chúng tôi đã phân tích cú pháp dữ liệu của mình và lưu trữ các giá trị trong các danh sách riêng biệt. Bước tiếp theo là chuyển đổi nó thành khung dữ liệu gấu trúc để làm cho dữ liệu có thể sử dụng dễ dàng
5. Tạo khung dữ liệu pandas____4Chọn tất cả các danh sách theo thứ tự mong muốn và thêm tên cột cho các cột tương ứng, chúng tôi đã sử dụng pd. Hàm DataFrame[] để tạo khung dữ liệu