Các phần tử HTML nào được pandas read_html() hỗ trợ?
Pandas cung cấp một phương thức có tên # Fetch all the tables present in the HTML content url = 'https://scrapeme.live/population-data.html' all_tables = pd.read_html(url)2 hỗ trợ đọc các bảng từ nội dung HTML. Chúng tôi có thể chuyển trực tiếp nội dung HTML hoặc URL tới một trang web có dữ liệu dạng bảng. Nó khá đơn giản trong hầu hết các trường hợp, nhưng có những trường hợp hơi khó để làm cho nó hoạt động Show
Quét web bằng gấu trúc chủ yếu hữu ích để trích xuất các bảng HTML cơ bản từ một trang web, nếu bạn chỉ cần một vài trang. Chúng tôi không khuyên bạn nên quét web bằng gấu trúc, nếu bạn cần trích xuất dữ liệu không phải ở dạng bảng hoặc nếu bạn cần cạo dữ liệu từ hàng nghìn trang. Các gói Python như LXML hoặc beautifulsoup phù hợp hơn cho công việc đó Mục lục Hãy bắt đầu với một ví dụ cơ bản Đây là những gì chúng tôi sẽ cố gắng làm
Đảm bảo rằng bạn đã cài đặt các gói này trong Python
Đây là cách cài đặt chúng pip install pandas lxml Tải một bảng cụ thể từ một trang có nhiều bảng bằng cách sử dụng kết hợp chuỗi hoặc RegExHãy nhập các thư viện cần thiết và bắt đầu # Import pandas import pandas as pd
Bây giờ, hãy đọc bảng từ trang web bằng cách sử dụng # Fetch all the tables present in the HTML content url = 'https://scrapeme.live/population-data.html' all_tables = pd.read_html(url)2 # Fetch all the tables present in the HTML content url = 'https://scrapeme.live/population-data.html' all_tables = pd.read_html(url) Nếu chúng ta kiểm tra độ dài của đối tượng all_tables, chúng ta có thể thấy rằng gấu trúc đã tạo hai khung dữ liệu, một cho bảng dữ liệu dân số và một cho bảng thống kê dân số bên dưới nó # Check the length of tables list print(len(all_tables)) Hiện chúng tôi có nhiều bảng. Nhưng làm cách nào để chúng tôi chỉ lấy bảng được yêu cầu từ trang web – tức là. bảng đầu tiên? # Check the first table all_tables[0] # Check the second table all_tables[1] hàm read_html có một tham số gọi là khớp, có thể được sử dụng để chỉ trích xuất những bảng khớp với một chuỗi hoặc Biểu thức chính quy nhất định ________số 8
Chúng tôi sẽ sử dụng từ khóa “Xếp hạng” được tìm thấy trên tiêu đề bảng để lọc ra tất cả các bảng khác. Bạn chỉ cần sử dụng một chuỗi hoặc biểu thức chính quy không phổ biến đối với các bảng khác trong trang HTML # Check the length of table print(len(all_tables)) Ở đó chúng tôi có nó, chỉ cần 1 bảng Giới hạn số hàng được trích xuấtChúng tôi có 241 hàng. Đối với ví dụ này, chúng tôi sẽ giới hạn dữ liệu ở 20 hàng đầu tiên. Chúng ta chỉ có thể sử dụng phương thức head của khung dữ liệu kết quả. Nhưng hãy thử một cách khác Chúng ta có thể sử dụng tham số bỏ qua, lấy một số nguyên hoặc một danh sách làm đối số bỏ qua bất kỳ số lượng hàng nào từ bảng được trích xuất pip install pandas lxml0 Đặt chỉ mục của khung dữ liệu trực tiếp trong read_htmlHãy thử và đặt Xếp hạng đã đặt làm chỉ mục của khung dữ liệu. Bạn luôn có thể thực hiện việc này sau bằng cách sử dụng phương thức set_index của khung dữ liệu. Thật thú vị, read_html có một tham số gọi là # Fetch all the tables present in the HTML content url = 'https://scrapeme.live/population-data.html' all_tables = pd.read_html(url)4 lấy tên của cột chỉ mục và đặt nó làm chỉ mục pip install pandas lxml2 Biến đổi một cột bằng các hàm chuyển đổiNgày cột ở dạng 4 tháng 11 năm 2022. Hãy chỉ nhận được năm. Để chuyển đổi cột Ngày, chúng ta có thể sử dụng trình chuyển đổi tham số. Nó lấy một từ điển làm đầu vào, trong đó khóa là tên cột cần được chuyển đổi và giá trị là một hàm nhận một đối số duy nhất, đó là nội dung ô # Import pandas import pandas as pd0 Ngày phân tích cú phápChúng ta cũng có thể sử dụng tham số # Fetch all the tables present in the HTML content url = 'https://scrapeme.live/population-data.html' all_tables = pd.read_html(url)5 để thay đổi định dạng ngày tháng # Import pandas import pandas as pd1 Thay thế NaN bằng chuỗi rỗngBạn có thể thấy một số giá trị # Fetch all the tables present in the HTML content url = 'https://scrapeme.live/population-data.html' all_tables = pd.read_html(url)6 trong tập dữ liệu, đại diện cho các giá trị trống. Chúng tôi có thể xóa các giá trị # Fetch all the tables present in the HTML content url = 'https://scrapeme.live/population-data.html' all_tables = pd.read_html(url)6 bằng các giá trị tùy chỉnh bằng cách sử dụng tham số # Fetch all the tables present in the HTML content url = 'https://scrapeme.live/population-data.html' all_tables = pd.read_html(url)8. Bạn có thể tìm thấy một ví dụ dưới đây # Import pandas import pandas as pd2 Xuất sang CSVHãy ghi dữ liệu này vào tệp CSV có thể mở được trong Excel. # Import pandas import pandas as pd3 Chúng tôi có thể loại trừ cột chỉ mục (Xếp hạng) khỏi CSV bằng cách đặt tham số # Fetch all the tables present in the HTML content url = 'https://scrapeme.live/population-data.html' all_tables = pd.read_html(url)9 thành # Check the length of tables list print(len(all_tables))0 Hãy thử một cái gì đó khó hơn một chút, để cho bạn thấy một số tính năng khác của read_html trong pandas Sử dụng nội dung HTML thay vì URL trong read_htmlLần này, hãy cạo một bảng với dữ liệu so sánh sản phẩm từ Amazon. com – https. //www. amazon. com/Apple-iPhone-Fully-Unlocked-128/dp/B07P611Q4N Trước tiên, hãy thử tìm nạp bảng từ URL bằng phương thức # Check the length of tables list print(len(all_tables))1 # Import pandas import pandas as pd4 Thay vì cung cấp cho chúng tôi một danh sách bảng, chúng tôi gặp Lỗi HTTP 503, như được hiển thị bên dưới Chúng ta có thể thấy rằng lỗi được trả về từ mô-đun # Check the length of tables list print(len(all_tables))2. Phương pháp # Check the length of tables list print(len(all_tables))1 sử dụng # Check the length of tables list print(len(all_tables))2 để gửi yêu cầu. Lỗi 503 này xảy ra do Amazon. com biết yêu cầu này không đến từ trình duyệt vì nó không có bất kỳ tiêu đề HTTP cần thiết nào Điều này cũng có thể xảy ra do trang web chặn truy cập bằng các biện pháp chống cào mà có thể không đơn giản để khắc phục May mắn thay cho sự cố này, chúng tôi có một cách khắc phục đơn giản là nói với Amazon rằng bạn đang sử dụng trình duyệt bằng cách chuyển một số tiêu đề HTTP cụ thể của trình duyệt Tuy nhiên, Pandas không cho phép chúng tôi thay đổi tiêu đề HTTP Như một giải pháp thay thế, chúng tôi sẽ sử dụng thư viện yêu cầu python để trước tiên tải xuống HTML với bộ tiêu đề HTTP phù hợp, sau đó chỉ cung cấp nội dung HTML đã tải xuống đó của trang cho gấu trúc để phân tích cú pháp và đọc các bảng Để cài đặt yêu cầu # Import pandas import pandas as pd5 # Import pandas import pandas as pd6 Bây giờ, hãy chuyển nội dung HTML tới Pandas # Check the length of tables list print(len(all_tables))1 và trích xuất bảng được yêu cầu # Import pandas import pandas as pd7 Tải một bảng cụ thể từ một trang có nhiều bảng bằng thuộc tính HTMLKiểm tra số lượng bảng được trích xuất # Check the length of tables list print(len(all_tables)) Chúng ta có thể quan sát thấy rằng nhiều bảng không mong muốn đang được tìm nạp. Để có được bảng cần thiết, chúng ta có thể sử dụng tham số # Check the length of tables list print(len(all_tables))6. Tham số này lấy một từ điển các thuộc tính HTML có thể được sử dụng để xác định bảng từ nội dung HTML Từ ảnh chụp màn hình ở trên, chúng ta có thể thấy rằng bảng được yêu cầu có id thuộc tính là # Check the length of tables list print(len(all_tables))7. Điều này có thể được sử dụng để xác định bảng trong nội dung HTML # Import pandas import pandas as pd9 Nếu các thuộc tính ( # Check the length of tables list print(len(all_tables))6) không khớp với bất kỳ bảng nào trong nội dung HTML, Pandas sẽ đưa ra một # Check the length of tables list print(len(all_tables))9 nói rằng không tìm thấy bảng nào. Một ví dụ được đưa ra dưới đây # Fetch all the tables present in the HTML content url = 'https://scrapeme.live/population-data.html' all_tables = pd.read_html(url)0 Ở đây, bảng ________ 60 phải khớp với ________ 61 không có trong trang web Xuất sang JSONCuối cùng, dữ liệu đã sẵn sàng. Hãy ghi nó vào một tệp JSON – So sánh_table. json # Fetch all the tables present in the HTML content url = 'https://scrapeme.live/population-data.html' all_tables = pd.read_html(url)1 Đó là nó. Nếu bạn có bất kỳ câu hỏi hoặc gặp phải bất kỳ vấn đề nào, vui lòng viết bình luận bên dưới Tiếp tục đọc
|