Làm cách nào để trích xuất bảng từ HTML Python?

Trước đây, chúng tôi đã tìm hiểu về những điều cơ bản của việc thu thập dữ liệu trên các trang web, nhưng bạn có biết rằng chúng tôi cũng có thể thu thập dữ liệu ở dạng bảng không? . Ví dụ: lịch bay, tính năng sản phẩm, sự khác biệt của dịch vụ, lịch truyền hình, xếp hạng, v.v.

Quả sung. 1 Bảng dữ liệu từ Similarweb. com

Trong một số trường hợp, có thể dễ dàng sao chép và dán bảng vào excel mà không cần viết mã, nhưng với tư cách là nhà khoa học dữ liệu, chúng ta cần hiểu rằng trong tương lai, chúng ta sẽ làm việc với dữ liệu lớn hơn khi phương pháp sao chép-dán không thực sự hiệu quả. Vì vậy, bây giờ tôi sẽ chỉ cho bạn cách cạo một bảng dữ liệu từ một trang web

BƯỚC 1. CÀI ĐẶT THƯ VIỆN

Trước hết, chúng tôi cần các thư viện cần thiết này được cài đặt trong môi trường của chúng tôi

  1. ĐẹpSoup4
  2. yêu cầu
  3. gấu trúc
  4. lxml

Tôi khuyên bạn nên đọc hướng dẫn trước về cách lấy dữ liệu từ trang web cho người mới bắt đầu nếu bạn gặp khó khăn ở bước này

BƯỚC 2. NHẬP KHẨU THƯ VIỆN CẦN THIẾT

Vì vậy, sau khi các thư viện quan trọng đã được cài đặt, điều tiếp theo chúng ta có thể làm là mở Spyder. Lý do tại sao tôi sử dụng Spyder vì nó thoải mái hơn khi sử dụng cho các dự án, nhưng cũng không sao nếu bạn có sở thích của riêng mình

Được rồi, khi chúng tôi mở Spyder, điều tiếp theo chúng tôi có thể làm là nhập thư viện cần thiết

# Import libraries
import requests
from bs4 import BeautifulSoup
import pandas as pd

BƯỚC 3. CHỌN TRANG

Trong dự án này, chúng tôi sẽ cạo bảng dữ liệu covid từ Worldometers. Giống như hướng dẫn trước, trang web này cũng được coi là dễ hiểu hơn cho người mới bắt đầu vì nó được tạo bằng HTML

Quả sung. 2 Bảng dữ liệu COVID

BƯỚC 4. XIN PHEP

Sau khi chúng tôi chọn trang mà chúng tôi muốn cạo, bây giờ chúng tôi có thể sao chép URL của trang và sử dụng các yêu cầu để xin phép máy chủ lưu trữ mà chúng tôi muốn lấy dữ liệu từ trang web của họ

# Create an URL object
url = 'https://www.worldometers.info/coronavirus/'
# Create object page
page = requests.get(url)

If the output is that means the server allows us to collect data from their website. After we have permission from the server now we need to parse the HTML code using lxml to make it more readable.

# parser-lxml = Change html to Python friendly format
# Obtain page's information
soup = BeautifulSoup(page.text, 'lxml')
soup

BƯỚC 5. KIỂM TRA PHẦN MỀM BẢNG

Trong bài viết trước, chúng ta đã học cách kiểm tra mọi thành phần trong một trang web, vì vậy tôi cho rằng bạn đã hiểu cách làm việc với nó. Để có được thông tin, trước tiên chúng ta cần kiểm tra vị trí của bảng

Quả sung. 3 Vị trí bàn

As we can see from the picture above that table is located under the

tag and id = ‘main_table_countries_today’. After we have found the location of the table now we can define the variable. In this section, we define the table as ‘table1’.

# Obtain information from tag 

table1 = soup.find(‘table’, id=’main_table_countries_today’)
table1

BƯỚC 6. TẠO DANH SÁCH CỘT

Sau khi bảng 1 đã được tạo, điều tiếp theo chúng ta có thể làm là kiểm tra vị trí của từng cột. Nếu chúng ta nhìn vào từng cột, chúng ta sẽ nhận thấy rằng chúng có cùng đặc điểm

Quả sung. 4 cột

In the picture above we can see the characteristic of each column is they are located under the tag

and items are located under tag
.

Sau khi chúng tôi tìm thấy thẻ của mỗi cột, điều tiếp theo chúng tôi có thể làm là tạo vòng lặp for để điền vào danh sách trống với mỗi cột. Chúng tôi xác định một danh sách trống làm tiêu đề

# Obtain every title of columns with tag 

headers = []
for i in table1.find_all(‘th’):
title = i.text
headers.append(title)

đầu ra

Quả sung. 5 tiêu đề

Sau khi danh sách được điền đầy đủ các cột thành công, bây giờ chúng ta có thể kiểm tra lại. Hãy nhìn vào chỉ mục 13, chúng tôi tìm thấy văn bản được bao bọc. Văn bản được bao bọc như thế này có thể là một vấn đề khi chúng ta muốn tạo khung dữ liệu từ nó, vì vậy chúng ta cần chuyển đổi nó thành văn bản một dòng

# Convert wrapped text in column 13 into one line text
headers[13] = ‘Tests/1M pop’

đầu ra

Quả sung. 6 Chỉ số 13 đã được sửa

BƯỚC 7. TẠO KHUNG DỮ LIỆU

Sau khi danh sách các cột được tạo, điều tiếp theo chúng ta có thể làm là tạo một khung dữ liệu. Chúng tôi xác định khung dữ liệu là mydata

# Create a dataframe
mydata = pd.DataFrame(columns = headers)

BƯỚC 8. TẠO MỘT VÒNG ĐẶT ĐỂ ĐIỀN DATAFRAME

Sau khi khung dữ liệu được tạo, bây giờ chúng ta có thể điền nó bằng các mục trong mỗi cột. Trước khi tạo vòng lặp for, trước tiên chúng ta cần xác định vị trí của cột hàng và cột mục

Quả sung. 7 Vị trí của hàng

Quả sung. 8 Vị trí của cột hạng mục

From the pictures above we can identify that the row is located under tag

. This is applied to all rows and items within the table.

Sau khi chúng tôi tìm thấy các thẻ, bây giờ chúng tôi có thể tạo vòng lặp for

# Create a for loop to fill mydata
for j in table1.find_all(‘tr’)[1:]:
row_data = j.find_all(‘td’)
row = [i.text for i in row_data]
length = len(mydata)
mydata.loc[length] = row

đầu ra

Quả sung. 9 Khung dữ liệu

BƯỚC 9. LÀM SẠCH KHU VỰC CƠ SỞ

Sau khi khung dữ liệu đã được tạo thành công, bây giờ chúng ta có thể thả và xóa các hàng không cần thiết. Trong phần này, chúng tôi sẽ bỏ chỉ mục 0–6, 222–228, sau đó đặt lại chỉ mục và bỏ cột '#'

________số 8_______

đầu ra

Quả sung. 10 Khung dữ liệu cuối cùng

BƯỚC 10. XUẤT SANG CSV VÀ THỬ CHẠY NÓ

Sau khi hoàn thành khung dữ liệu, điều tiếp theo chúng ta có thể làm là xuất nó sang định dạng CSV

# Export to csv
mydata.to_csv(‘covid_data.csv’, index=False)
# Try to read csv
mydata2 = pd.read_csv(‘covid_data.csv’)

Vì khung dữ liệu đã được xuất thành CSV nên bây giờ chúng tôi có thể sử dụng dữ liệu để xây dựng dự án khoa học dữ liệu, đưa nó vào học máy, dự án phân tích dữ liệu, v.v.

Đó là bài hướng dẫn mình đưa ra, hy vọng sẽ hữu ích cho các bạn đặc biệt là các bạn đang học lướt web. Hẹn gặp lại các bạn trong dự án tiếp theo

Làm cách nào để nhập bảng HTML vào Python?

Cách sử dụng cơ bản .
nhập gấu trúc dưới dạng pd nhập numpy dưới dạng np nhập matplotlib. pyplot as plt from unicodedata import normalize table_MN = pd. .
print(f'Tổng số bảng. {len(bảng_MN)}')
Tổng số bảng. 38. .
bảng_MN = pd. .
df = table_MN[0] df

Làm cách nào để lấy dữ liệu từ bảng HTML?

Bộ sưu tập ô bảng .
Tìm xem có bao nhiêu ô ở hàng đầu tiên trong một bảng. getElementById("myTable"). .
[index] Cảnh báo InternalHTML của ô đầu tiên trong hàng đầu tiên của bảng. .
item(index) Thông báo InternalHTML của ô đầu tiên trong hàng đầu tiên của bảng. .
tênItem(id).
Thay đổi nội dung ô đầu tiên của bảng

Làm cách nào để chuyển đổi bảng HTML thành DataFrame trong Python?

Sử dụng Python, hãy cho chúng tôi hiểu cách chuyển đổi bảng HTML thành khung dữ liệu gấu trúc. HTML cung cấp cho chúng ta thẻ Thư viện Pandas có chức năng read_html() để nhập dữ liệu vào khung dữ liệu .