Pandas cung cấp một phương thức có tên
# Fetch all the tables present in the HTML content url = '//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
- 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
- Nhận 20 quốc gia hàng đầu
- Đặt cột Xếp hạng làm chỉ mục
- Thay thế tất cả các giá trị NaN bằng một chuỗi rỗng
- Trích xuất năm từ cột Ngày
Đả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 = '//scrapeme.live/population-data.html' all_tables = pd.read_html[url]2
# Fetch all the tables present in the HTML content url = '//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?
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]
# 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ấ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 lxml0
Đặ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 = '//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 đổ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 pd0
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 = '//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ỗng
Bạn có thể thấy một số giá trị
# Fetch all the tables present in the HTML content url = '//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 = '//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 = '//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 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 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 = '//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
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 HTML
Kiể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 = '//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 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 = '//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 .