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

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

  1. Tải bảng đầu tiên với dữ liệu dân số của các quốc gia từ URL này https. // cạo. trực tiếp/dữ liệu dân số. html, vào Khung dữ liệu Pandas
  2. Nhận 20 quốc gia hàng đầu
  3. Đặt cột Xếp hạng làm chỉ mục
  4. Thay thế tất cả các giá trị NaN bằng một chuỗi rỗng
  5. Trích xuất năm từ cột Ngày

Các phần tử HTML nào được pandas read_html() hỗ trợ?

Đảm bảo rằng bạn đã cài đặt các gói này trong Python

  • gấu trúc
  • LXML

Đâ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 RegEx

Hã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))

Các phần tử HTML nào được pandas read_html() hỗ trợ?

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?
Trong ví dụ này, bạn chỉ có thể sử dụng all_tables[0] để lấy bảng đầu tiên. Nhưng điều đó không phải lúc nào cũng đúng với các trang web khác có thể có nhiều Bảng HTML.

# Check the first table
all_tables[0]

Các phần tử HTML nào được pandas read_html() hỗ trợ?

# Check the second table
all_tables[1]

Các phần tử HTML nào được pandas read_html() hỗ trợ?

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

Các phần tử HTML nào được pandas read_html() hỗ trợ?

# Check the length of table
print(len(all_tables))

Các phần tử HTML nào được pandas read_html() hỗ trợ?

Ở đó chúng tôi có nó, chỉ cần 1 bảng

Giới hạn số hàng được trích xuất

Chú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 lxml
0

Đặt chỉ mục của khung dữ liệu trực tiếp trong read_html

Hã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 lxml
2

Các phần tử HTML nào được pandas read_html() hỗ trợ?

Biến đổi một cột bằng các hàm chuyển đổi

Ngà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 pd
0

Các phần tử HTML nào được pandas read_html() hỗ trợ?

Ngày phân tích cú pháp

Chú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 pd
1

Thay thế NaN bằng chuỗi rỗng

Bạ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 pd
2

Xuất sang CSV

Hãy ghi dữ liệu này vào tệp CSV có thể mở được trong Excel.
Pandas hỗ trợ xuất dữ liệu sang nhiều định dạng như JSON, CSV, Excel và HTML.
Ở đây, chúng tôi sẽ ghi dữ liệu vào tệp CSV civil_data. csv.

# Import pandas
import pandas as pd
3

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_html

Lầ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

Các phần tử HTML nào được pandas read_html() hỗ trợ?

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 pd
4

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

Các phần tử HTML nào được pandas read_html() hỗ trợ?

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 pd
5
# Import pandas
import pandas as pd
6

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 pd
7

Tải một bảng cụ thể từ một trang có nhiều bảng bằng thuộc tính HTML

Kiểm tra số lượng bảng được trích xuất

# Check the length of tables list
print(len(all_tables))

Các phần tử HTML nào được pandas read_html() hỗ trợ?

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

Các phần tử HTML nào được pandas read_html() hỗ trợ?

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 pd
9

Các phần tử HTML nào được pandas read_html() hỗ trợ?

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

Các phần tử HTML nào được pandas read_html() hỗ trợ?

Xuất sang JSON

Cuố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

  • Cách cạo dữ liệu bằng Data Scraper

    Quét web là phương pháp tốt nhất để thu thập dữ liệu sản phẩm từ Amazon. Các công cụ cạo như Data cạp giúp người dùng cạo các trang web Thương mại điện tử một cách dễ dàng. Ở đây chúng tôi sẽ chỉ cho bạn cách trích xuất dữ liệu từ Amazon. com…

  • Cạo dữ liệu công việc Glassdoor bằng Python và LXML

    Tìm kiếm trên web là một nguồn cung cấp dữ liệu việc làm tuyệt vời nếu bạn đang tìm kiếm việc làm trong một thành phố hoặc trong một mức lương cụ thể. Hướng dẫn quét web bằng Python 3 này sẽ cho bạn thấy…

  • Cách cạo Fandango bằng Python và LXML

    Tìm hiểu cách cạo thông tin chi tiết phim từ Fandango. com, một trang web đặt chỗ xem phim sử dụng Python và LXML trong hướng dẫn quét web này. Chúng tôi sẽ hướng dẫn bạn cách trích xuất chi tiết phim như phim chiếu rạp đang chiếu,…

    Làm cách nào để đọc tệp HTML trong gấu trúc?

    Đọc HTML . Hàm này đọc các bảng tệp HTML dưới dạng Pandas DataFrames. Nó có thể đọc từ một tệp hoặc một URL. using the read_html() function. This function read tables of HTML files as Pandas DataFrames. It can read from a file or a URL.

    Gấu trúc có thể đọc bảng HTML không?

    Bạn có thể sử dụng hàm pandas read_html() để đọc các bảng HTML vào DataFrame của gấu trúc .

    Thư viện Python nào có phương thức read_html() mà chúng ta có thể sử dụng để phân tích tài liệu HTML và trích xuất bảng?

    Pandas là một trong những thư viện Python phổ biến nhất để phân tích dữ liệu. Thư viện này có nhiều chức năng hữu ích. Một trong những chức năng như vậy là pandas read_html . Nó có thể chuyển đổi các bảng HTML thành DataFrame của gấu trúc một cách hiệu quả.

    Làm cách nào để đọc dữ liệu HTML trong R?

    1 Đọc HTML. Đầu tiên, sao chép url của trang web và lưu trữ nó trong một tham số. Tiếp theo, sử dụng rvest. read_html() để đọc tất cả HTML vào R .