Bảng HTML tới khung dữ liệu Python BeautifulSoup

Chúng ta đã ở trong kỷ nguyên internet được vài thập kỷ, trong đó, internet đã tích lũy được hàng tấn dữ liệu. Bất kể chuyên môn của bạn là gì, bạn sẽ tìm thấy dữ liệu hữu ích ở đâu đó trên internet. Nếu bạn đang cân nhắc theo đuổi sự nghiệp khoa học dữ liệu, bạn không nên lo lắng về việc không có bộ dữ liệu đồ chơi nào để chơi — chỉ cần lấy một số dữ liệu từ internet

Chờ đã — Tôi quên rằng nhiều dữ liệu hiển thị trên một trang web không ở định dạng thân thiện với khoa học dữ liệu. Thay vào đó, chúng được trình bày dưới dạng các phần tử HTML có thể áp dụng. Do đó, một bước cần thiết để có được những dữ liệu này là chuyển đổi từ định dạng HTML sang định dạng được lập bảng. Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách lấy dữ liệu dạng bảng từ một trang web bằng kỹ thuật quét web

từ chối trách nhiệm. có thể có các quy định pháp lý liên quan đến việc quét web. Bài viết này không nhằm mục đích chứng thực cho việc quét web. Ở đây, chúng tôi sẽ tập trung vào tính kỹ thuật và sử dụng Wikipedia làm nguồn dữ liệu theo giấy phép tài liệu miễn phí

Vâng, Pandas là có thể

Chắc chắn rằng nhiều nhà khoa học dữ liệu sử dụng Python làm ngôn ngữ làm việc cho các dự án khoa học dữ liệu của họ. Nếu bạn là người yêu thích Python, có lẽ bạn cũng sử dụng Pandas, một trong những thư viện linh hoạt nhất để xử lý và thao tác dữ liệu. Dù bạn có tin hay không thì tùy, bạn có thể sử dụng Pandas để thực hiện các công việc quét web nguyên thủy — đơn giản như một dòng mã

dfs = pd.read_html["the_url_to_the_website"]

Không giống như các hàm

# using pip
pip install beautifulsoup4
# using conda
conda install beautifulsoup4
7 khác tạo ra một
# using pip
pip install beautifulsoup4
# using conda
conda install beautifulsoup4
8 duy nhất, hàm
# using pip
pip install beautifulsoup4
# using conda
conda install beautifulsoup4
9 trả về một danh sách
# using pip
pip install beautifulsoup4
# using conda
conda install beautifulsoup4
8, với mỗi hàm tương ứng với một bảng trong trang web. Hãy sử dụng một ví dụ [liên kết web]

Đọc HTML của Pandas

Như hình trên, Pandas đọc trang web này và có hai đối tượng

# using pip
pip install beautifulsoup4
# using conda
conda install beautifulsoup4
8. Chắc chắn, khi bạn gặp trường hợp có hai bảng, bạn sẽ dễ dàng tìm ra bảng nào — bạn chỉ cần xem cả hai và chọn bảng mà bạn muốn làm việc cùng. Tôi

Trong trường hợp của chúng tôi, đây là bảng đầu tiên mà chúng tôi cần nghiên cứu dân số theo quốc gia

DataFrame được tạo bởi read_html

Đáng chú ý, trên trang web gốc, các quần thể thô sử dụng dấu phẩy để phân tách mỗi ba chữ số và Pandas loại bỏ các dấu phẩy này và chuyển đổi chúng thành số nguyên một cách chính xác — một loại dữ liệu thân thiện với các nhà khoa học dữ liệu. Một lần nữa, nó làm nổi bật tính linh hoạt của Pandas như một thư viện xử lý dữ liệu hữu ích

Thông thường, có nhiều bảng trên trang web. Mặc dù chúng ta có thể xem qua từng Khung dữ liệu để xem dữ liệu nào là dữ liệu chúng ta cần, nhưng việc xác định vị trí của nó có thể rất tẻ nhạt. Đó không phải là cách Python hay Pandas hoạt động, bởi vì nó được cho là ngắn gọn, giúp cuộc sống của chúng ta trở nên dễ dàng. Không ngạc nhiên,

# using pip
pip install beautifulsoup4
# using conda
conda install beautifulsoup4
9 có một tham số mà bạn muốn sử dụng —
# using pip
pip install beautifulsoup4
# using conda
conda install beautifulsoup4
1, tham số mà bạn chỉ định văn bản [chuỗi ký tự hoặc biểu thức chính quy] mà bảng sẽ chứa

Đặc điểm kỹ thuật của văn bản trong bảng

Như được hiển thị ở trên, chúng tôi chỉ định rằng bảng phải chứa

# using pip
pip install beautifulsoup4
# using conda
conda install beautifulsoup4
2 sao cho chỉ có một
# using pip
pip install beautifulsoup4
# using conda
conda install beautifulsoup4
8 được tạo

Cần lưu ý rằng

# using pip
pip install beautifulsoup4
# using conda
conda install beautifulsoup4
9 sẽ tăng
# using pip
pip install beautifulsoup4
# using conda
conda install beautifulsoup4
5 khi không tìm thấy bảng nào trong tài liệu HTML. Nói cách khác, chức năng này chỉ có thể quét các bảng trên một trang web, điều này gây hạn chế nếu bạn muốn lấy dữ liệu khác. Vì vậy, chúng ta nên xem xét giải pháp thay thế — thư viện Beautiful Soup để quét web nâng cao hơn

Súp đẹp

Beautiful Soup là một thư viện mạnh chuyên xử lý các tài liệu HTML hoặc XML. Bạn có thể sử dụng thư viện này để tìm kiếm và sửa đổi cây phân tích cú pháp, bạn có thể nghĩ về cấu trúc có tổ chức bằng cách sử dụng một loạt các thẻ phân cấp. Bạn có thể cài đặt thư viện này bằng cách sử dụng

# using pip
pip install beautifulsoup4
# using conda
conda install beautifulsoup4
6 hoặc
# using pip
pip install beautifulsoup4
# using conda
conda install beautifulsoup4
7

# using pip
pip install beautifulsoup4
# using conda
conda install beautifulsoup4

Lưu ý thêm, khi bạn sử dụng

# using pip
pip install beautifulsoup4
# using conda
conda install beautifulsoup4
9 với Pandas, bạn có thể nhận thấy rằng bạn sẽ được yêu cầu cài đặt Beautiful Soup và các gói hỗ trợ khác [e. g. ,
# using pip
pip install beautifulsoup4
# using conda
conda install beautifulsoup4
9 hoặc
>>> heading = soup.find[id="firstHeading"]
heading
>>>

List of countries by population [United Nations]


>>> type[heading]

>>> heading.text
'List of countries by population [United Nations]'
0]. Một thư viện khác mà bạn muốn cài đặt là
>>> heading = soup.find[id="firstHeading"]
heading
>>>

List of countries by population [United Nations]


>>> type[heading]

>>> heading.text
'List of countries by population [United Nations]'
1, thư viện này đặc biệt hữu ích để thực hiện các yêu cầu web nhằm lấy mã nguồn thô của trang web

Bước 1. Lấy tài liệu HTML

Trước khi chúng tôi bắt đầu quét trang web, trước tiên hãy lấy tài liệu HTML để xử lý ngoại tuyến. Đoạn mã sau chỉ cho bạn bước đầu tiên

Lấy tài liệu HTML

Trong đoạn mã trên, chúng tôi sử dụng

>>> heading = soup.find[id="firstHeading"]
heading
>>>

List of countries by population [United Nations]


>>> type[heading]

>>> heading.text
'List of countries by population [United Nations]'
1 để chạy yêu cầu GET tìm nạp trang web và chúng tôi có thể lấy tài liệu bằng cách truy cập thuộc tính
>>> heading = soup.find[id="firstHeading"]
heading
>>>

List of countries by population [United Nations]


>>> type[heading]

>>> heading.text
'List of countries by population [United Nations]'
3 của phản hồi. Tài liệu này đã sẵn sàng để được cạo

Bước 2. Kiểm tra các yếu tố cần thiết

Hiểu rõ về trang nguồn là bước cần thiết để trích xuất thông tin bạn cần. Trên thực tế, như bạn có thể biết, bạn có thể xem mã nguồn của trang web trong trình duyệt web của mình, chẳng hạn như Chrome hoặc Firefox. Trong trường hợp của chúng tôi, bạn có thể xem nó bằng cách vào liên kết. xem nguồn. https. // vi. wikipedia. org/wiki/List_of_countries_by_population_[United_Nations], như minh họa bên dưới để xem nhanh

Ảnh chụp màn hình Mã nguồn cho Trang Web

Bên cạnh việc xem mã trong trình duyệt web, Beautiful Soup cung cấp một cách có lập trình để xem mã nguồn theo cách có thể đọc được, như minh họa bên dưới

Mã nguồn web được tổ chức bởi Beautiful Soup

Xem mã nguồn tĩnh có thể không hữu ích vì có quá nhiều văn bản. Thay vào đó, bạn nên kiểm tra các yếu tố bằng công cụ dành cho nhà phát triển của Chrome hoặc Firefox

Kiểm tra các phần tử HTML

Bạn chỉ cần di chuột vào một phần tử mà bạn quan tâm, Trình kiểm tra sẽ tô sáng thông tin của phần tử đó. Chẳng hạn, chúng ta có thể biết rằng tiêu đề có thẻ h1, id của nó là

>>> heading = soup.find[id="firstHeading"]
heading
>>>

List of countries by population [United Nations]


>>> type[heading]

>>> heading.text
'List of countries by population [United Nations]'
4 và lớp của nó là
>>> heading = soup.find[id="firstHeading"]
heading
>>>

List of countries by population [United Nations]


>>> type[heading]

>>> heading.text
'List of countries by population [United Nations]'
4

Ý tưởng kiểm tra là thu thập thông tin có thể nhận dạng, chẳng hạn như

>>> heading = soup.find[id="firstHeading"]
heading
>>>

List of countries by population [United Nations]


>>> type[heading]

>>> heading.text
'List of countries by population [United Nations]'
6,
>>> heading = soup.find[id="firstHeading"]
heading
>>>

List of countries by population [United Nations]


>>> type[heading]

>>> heading.text
'List of countries by population [United Nations]'
7 và
>>> heading = soup.find[id="firstHeading"]
heading
>>>

List of countries by population [United Nations]


>>> type[heading]

>>> heading.text
'List of countries by population [United Nations]'
8, cho các thành phần mà bạn cần

Bước 3. Trích xuất dữ liệu

Khi bạn có thông tin nhận dạng của các mục, đã đến lúc trích xuất dữ liệu từ trang web. Có một số cách để làm điều đó và việc chọn cách nào chỉ đơn giản dựa trên nhu cầu của bạn. Hãy xem từng người một

Nếu bạn quan tâm đến một yếu tố cụ thể và bạn biết id của nó, thì đây có lẽ là kịch bản đơn giản nhất

________số 8

Như bạn có thể thấy, chúng tôi sử dụng phương thức

>>> heading = soup.find[id="firstHeading"]
heading
>>>

List of countries by population [United Nations]


>>> type[heading]

>>> heading.text
'List of countries by population [United Nations]'
9 bằng cách chỉ định phần tử
>>> heading = soup.find[id="firstHeading"]
heading
>>>

List of countries by population [United Nations]


>>> type[heading]

>>> heading.text
'List of countries by population [United Nations]'
7 và chúng tôi nhận được phần tử, được Beautiful Soup phân tích dưới dạng đối tượng
# using pip
pip install beautifulsoup4
# using conda
conda install beautifulsoup4
01. Với đối tượng này, chúng ta có thể truy xuất tiêu đề bằng cách truy cập thuộc tính
>>> heading = soup.find[id="firstHeading"]
heading
>>>

List of countries by population [United Nations]


>>> type[heading]

>>> heading.text
'List of countries by population [United Nations]'
3 của nó

Bằng cách này, bạn chỉ cần lấy tiêu đề đầu tiên của trang web. Nếu bạn có nhiều trang web, bạn có thể xử lý chúng tuần tự để truy xuất từng tiêu đề đầu tiên

Ngoài ra, bạn có thể sử dụng phương thức

>>> heading = soup.find[id="firstHeading"]
heading
>>>

List of countries by population [United Nations]


>>> type[heading]

>>> heading.text
'List of countries by population [United Nations]'
9 bằng cách chỉ định tên thẻ. Tuy nhiên, nó sẽ trả về phần tử đầu tiên khớp với thẻ. Bởi vì chúng tôi biết rằng chỉ có phần tử h1, chúng tôi có thể lấy nó một cách đơn giản bằng cách gọi

# using pip
pip install beautifulsoup4
# using conda
conda install beautifulsoup4
0

Nếu bạn quan tâm đến một tập hợp các phần tử, bạn nên xem xét phương pháp

# using pip
pip install beautifulsoup4
# using conda
conda install beautifulsoup4
04. Chẳng hạn, hãy truy xuất tất cả các tiêu đề h2 để biết tổ chức của tài liệu web

Tìm một tập hợp các phần tử

Trong đoạn mã trên, tôi đang cho bạn thấy rằng sử dụng phương thức

# using pip
pip install beautifulsoup4
# using conda
conda install beautifulsoup4
04 sẽ lấy tất cả các phần tử có thẻ h2. Đối với những phần tử này, chúng tôi có thể nhận được tất cả phụ đề vì
# using pip
pip install beautifulsoup4
# using conda
conda install beautifulsoup4
06 là một trình vòng lặp

Điều gì sẽ xảy ra nếu bạn không biết mình đang tìm kiếm những phần tử nào, nhưng lại muốn tìm ra phần tử chứa một chuỗi nhất định. Trong trường hợp này, bạn chỉ cần yêu cầu Beautiful Soup thực hiện công việc nặng nhọc cho bạn — nó có thể tìm kiếm chuỗi cụ thể, như hình bên dưới

# using pip
pip install beautifulsoup4
# using conda
conda install beautifulsoup4
7

Với đặc tả của văn bản

# using pip
pip install beautifulsoup4
# using conda
conda install beautifulsoup4
07, phương thức
>>> heading = soup.find[id="firstHeading"]
heading
>>>

List of countries by population [United Nations]


>>> type[heading]

>>> heading.text
'List of countries by population [United Nations]'
9 định vị phần tử. Thông thường, bản thân phần tử không phải là thứ bạn muốn và trong hầu hết các trường hợp, bạn có thể kiểm tra phần tử cha của phần tử bằng cách truy cập thuộc tính
# using pip
pip install beautifulsoup4
# using conda
conda install beautifulsoup4
09. Chắc chắn, nếu bạn muốn tìm thêm các phần tử với chuỗi này, bạn chỉ cần sử dụng phương thức
# using pip
pip install beautifulsoup4
# using conda
conda install beautifulsoup4
04 để thay thế

Mặc dù chúng tôi đã chỉ cho bạn cách cạo bảng bằng read_html trong Pandas, nhưng đây là một nhiệm vụ khả thi mà bạn có thể tự mình thực hiện với Beautiful Soup

Phân tích bảng với món súp đẹp

Đoạn mã trên cho bạn thấy một giải pháp khả thi để phân tích cú pháp bảng. Một vài điều đáng chú ý

  • Phần tử bảng có thẻ
    # using pip
    pip install beautifulsoup4
    # using conda
    conda install beautifulsoup4
    71. Chúng ta có thể sử dụng phương pháp
    >>> heading = soup.find[id="firstHeading"]
    heading
    >>>

    List of countries by population [United Nations]


    >>> type[heading]

    >>> heading.text
    'List of countries by population [United Nations]'
    9 để xác định vị trí của nó
  • Trong một tài liệu HTML, mỗi hàng của bảng có một thẻ là
    # using pip
    pip install beautifulsoup4
    # using conda
    conda install beautifulsoup4
    73. Trong mỗi hàng, dữ liệu được trình bày dưới dạng cột sử dụng thẻ của
    # using pip
    pip install beautifulsoup4
    # using conda
    conda install beautifulsoup4
    74. Vì vậy, chúng tôi lặp lại các hàng và với mỗi hàng, chúng tôi lặp lại các cột
  • Tất cả dữ liệu được lưu dưới dạng chuỗi. Vì vậy, nếu bạn muốn tiến hành dự án của mình, điều quan trọng là bạn phải tiếp tục dọn dẹp bàn

Phần kết luận

Trong bài viết này, trước tiên chúng tôi đã xem xét cách dễ dàng cạo bảng bằng một lệnh gọi hàm Pandas duy nhất - hàm

# using pip
pip install beautifulsoup4
# using conda
conda install beautifulsoup4
9. Không giống như các phương thức
# using pip
pip install beautifulsoup4
# using conda
conda install beautifulsoup4
76 khác của Pandas, lệnh gọi
# using pip
pip install beautifulsoup4
# using conda
conda install beautifulsoup4
9 tạo ra một danh sách
# using pip
pip install beautifulsoup4
# using conda
conda install beautifulsoup4
8. Xin lưu ý rằng chức năng này chỉ hoạt động khi có các phần tử bảng trên trang web

Nếu bạn có các yêu cầu quét web nâng cao hơn, bạn có thể muốn dùng thử thư viện Beautiful Soup, chuyên xử lý các tài liệu HTML cũng như XML. Bằng cách tạo một cây phân tích cú pháp, Beautiful Soup có thể dễ dàng định vị các phần tử cần thiết theo id, lớp, thẻ hoặc thậm chí là thuộc tính, mặc dù cách tiếp cận cuối cùng không được đề cập trong bài viết này

Dù sao đi nữa, tất cả các chức năng mà Beautiful Soup cung cấp cung cấp cho bạn hầu hết mọi thứ bạn cần để xử lý các trang web nhằm trích xuất dữ liệu mong muốn. Như bạn có thể đã phát hiện ra, việc quét web nghe có vẻ rất kỹ thuật, nhưng đối với các trường hợp sử dụng cơ bản như lấy một số dữ liệu, điều đó không khó lắm phải không?

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

Hàm pandas read_html[] là một cách nhanh chóng và thuận tiện để biến bảng HTML thành DataFrame của gấu trúc. Chức năng này có thể hữu ích để nhanh chóng kết hợp các bảng từ các trang web khác nhau mà không cần tìm cách cạo HTML của trang web.

Làm cách nào để trích xuất dữ liệu bảng HTML bằng Python?

Để trích xuất một bảng từ HTML, trước tiên bạn cần mở các công cụ dành cho nhà phát triển của mình để xem HTML trông như thế nào và xác minh xem đó có thực sự là một bảng chứ không phải một phần tử nào khác không. Bạn mở công cụ dành cho nhà phát triển bằng phím F12, xem tab “Thành phần” và đánh dấu thành phần bạn quan tâm .

Gấu trúc có thể đọc bảng HTML khô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ả .

Chủ Đề