Cách cạo dữ liệu từ html bằng python

Trong lĩnh vực khoa học dữ liệu, chúng ta luôn phụ thuộc vào dữ liệu. Có nhiều cách dữ liệu có thể được thu thập. Một trong nhiều nguồn là dữ liệu từ các trang web. Các trang web cũng có thể là nguồn dữ liệu thứ cấp, chẳng hạn như có nhiều ví dụ về các trang web như vậy. các trang web tổng hợp dữ liệu [ví dụ:. Worldometers], các trang web tin tức [ví dụ:. CNBC], phương tiện truyền thông xã hội [ví dụ:. Twitter], thương mại điện tử [ví dụ:. Shopee], v.v. Những trang web đó rất hữu ích và chúng được cung cấp dữ liệu cần thiết cho các dự án khoa học dữ liệu

Quả sung. 1 Web Scraping [Nguồn. Trung tâm Khoa học Dữ liệu, 2020]

Nhưng làm thế nào để thu thập dữ liệu? . Trong Python có 1 thư viện mạnh tên là BeautifulSoup và Selenium. Cả hai thường được các nhà khoa học dữ liệu sử dụng để thu thập nhiều định dạng dữ liệu. Trong phần này, chúng tôi sẽ giới thiệu đến BeautifulSoup trước

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

Trước hết, chúng ta cần cài đặt các thư viện cần thiết, chẳng hạn như

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

Để cài đặt một thư viện, bạn chỉ cần cài đặt nó bằng cách sử dụng pip install [tên thư viện] hoặc cài đặt conda [tên thư viện] nếu bạn đang sử dụng Anaconda Prompt. Đầu tiên, chúng tôi muốn cài đặt BeautifulSoup4

Quả sung. 2 Cài đặt bs4

Sau khi chúng tôi cài đặt BeatifulSoup4 [bs4], điều tiếp theo chúng tôi có thể làm là cài đặt 'yêu cầu'. ‘Yêu cầu’ là thư viện có nhiệm vụ xin phép máy chủ lưu trữ nếu chúng tôi muốn lấy dữ liệu từ trang web của họ. Sau đó, chúng ta cũng cần cài đặt pandas để tạo khung dữ liệu và lxml để thay đổi định dạng HTML thành định dạng thân thiện với Python

Quả sung. 3 Cài đặt 'yêu cầu'

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

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ở môi trường yêu thích của bạn. Trong hướng dẫn này, chúng tôi khuyên bạn nên sử dụng Spyder 4. 2. 5 vì trong một số bước, chúng ta sẽ gặp đầu ra dài nên Spyder sử dụng thoải mái hơn Jupyter Notebook

Đượ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 library
from bs4 import BeautifulSoup
import requests

BƯỚC 3. CHỌN TRANG

Trong dự án này, chúng tôi sẽ sử dụng webscraper. io. Vì trang web này được tạo bằng HTML nên dễ đọc mã hơn và phù hợp cho người mới bắt đầu. Bây giờ, trong phần này, chúng tôi sẽ cạo trang này

Quả sung. 4 Trình quét web. io

Trang này là nguyên mẫu của một trang web Thương mại điện tử. Trong dự án này, chúng tôi sẽ cạo dữ liệu của máy tính và máy tính xách tay, chẳng hạn như tên sản phẩm, giá cả, mô tả và đánh giá

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 yêu cầu để xin phép máy chủ lưu trữ mà chúng tôi muốn tìm nạp dữ liệu từ trang web của họ

# Define URL
url = ‘//webscraper.io/test-sites/e-commerce/allinone/computers/laptops'
# Ask hosting server to fetch url
requests.get[url]

If the output is so that means the server allows us to collect data from their website. To verify we can define the request.get function into text.

pages = requests.get[url]
pages.text

Nếu bạn chạy mã này, đầu ra sẽ là mã tập lệnh lộn xộn không thân thiện với Python. Chúng tôi cần sử dụng trình phân tích cú pháp để có thể làm cho nó dễ đọc hơn

# parser-lxml = Change html to Python friendly format
soup = BeautifulSoup[pages.text, ‘lxml’]
soup

Quả sung. 5 Trước và Sau khi sử dụng Parse

BƯỚC 5. KIỂM TRA NGUYÊN TỐ

Đối với mọi dự án quét web, chúng tôi khuyên bạn nên sử dụng Google Chrome vì nó rất tiện dụng và dễ sử dụng. Bây giờ chúng ta sẽ tìm hiểu cách kiểm tra mã script của trang web bằng Chrome. Đầu tiên bạn click chuột phải vào trang muốn kiểm tra, sau đó click Inspect sau đó bạn sẽ thấy cái này

Quả sung. 6 Kiểm tra phần tử

Sau đó, bạn có thể nhấp vào Chọn một thành phần trong trang để kiểm tra nó. Sau khi nhấp vào nó, bạn sẽ nhận thấy nếu bạn di chuyển con trỏ đến từng phần tử của trang, menu phần tử sẽ cung cấp cho bạn thông tin về tập lệnh của phần tử được chọn là gì

Quả sung. 7 Ví dụ

Ví dụ: nếu chúng tôi di chuyển con trỏ đến Trang web thử nghiệm, phần tử sẽ thông báo cho bạn rằng Trang web thử nghiệm nằm trong thẻ h1. Trong Python, nếu bạn muốn kiểm tra các thành phần của trang web, bạn có thể gọi các thẻ. Đặc điểm của thẻ là luôn có tiền tố < và thường có màu tím

BƯỚC 6. TRUY CẬP THẺ

Ví dụ: chúng ta muốn truy cập phần tử của h1 bằng Python, chúng ta chỉ cần gõ cái này

# Access h1 tag
soup.h1

đầu ra sẽ là

soup.h1
Out[11]:

Test Sites

Chẳng hạn, không chỉ thẻ dòng đơn, bạn còn có thể truy cập thẻ lớp

# Access header tag
soup.header
# Access div tag
soup.div

Hãy nhớ định nghĩa súp trước, vì điều quan trọng là thay đổi HTML thành định dạng thân thiện với Python

You can access a specific tag from nested tags. The nested tags mean tags inside tags. For example tag

is located inside tag . But when you access a specific tag from , Python always showing results from the first index. We will learn how to access multiple tags from nested tags later.

# Access string from nested tags
soup.header.p

đầu ra

________số 8

Bạn cũng có thể truy cập một chuỗi từ một thẻ cụ thể từ các thẻ lồng nhau. Bạn có thể chỉ cần thêm một chuỗi vào mã

# Access string from nested tags
soup.header.p
soup.header.p.string

đầu ra

# Define URL
url = ‘//webscraper.io/test-sites/e-commerce/allinone/computers/laptops'
# Ask hosting server to fetch url
requests.get[url]
0

Được rồi, bây giờ chúng ta đã hiểu cách truy cập các thẻ từ các thẻ lồng nhau. Vì vậy, điều tiếp theo chúng ta có thể tìm hiểu là cách truy cập các thuộc tính trong thẻ. Để làm điều này chúng ta có thể sử dụng attrs, đây là tính năng của BeautifulSoup. Đầu ra của attrs là một từ điển

# Define URL
url = ‘//webscraper.io/test-sites/e-commerce/allinone/computers/laptops'
# Ask hosting server to fetch url
requests.get[url]
1

đầu ra

# Define URL
url = ‘//webscraper.io/test-sites/e-commerce/allinone/computers/laptops'
# Ask hosting server to fetch url
requests.get[url]
2

Chúng tôi có thể truy cập một thuộc tính cụ thể, hãy nhớ rằng Python coi thuộc tính đó là từ điển, vì vậy chúng tôi coi chuyển đổi dữ liệu, mục tiêu dữ liệu và mục tiêu dữ liệu-2 là khóa. Bây giờ, ví dụ, chúng tôi sẽ truy cập vào mục tiêu dữ liệu

# Define URL
url = ‘//webscraper.io/test-sites/e-commerce/allinone/computers/laptops'
# Ask hosting server to fetch url
requests.get[url]
3

đầu ra

# Define URL
url = ‘//webscraper.io/test-sites/e-commerce/allinone/computers/laptops'
# Ask hosting server to fetch url
requests.get[url]
4

Chúng tôi cũng có thể thêm một thuộc tính mới, hãy nhớ rằng các thay đổi chỉ ảnh hưởng đến trang web cục bộ, không ảnh hưởng đến chính trang web đó trên toàn cầu

# Define URL
url = ‘//webscraper.io/test-sites/e-commerce/allinone/computers/laptops'
# Ask hosting server to fetch url
requests.get[url]
5

đầu ra

# Define URL
url = ‘//webscraper.io/test-sites/e-commerce/allinone/computers/laptops'
# Ask hosting server to fetch url
requests.get[url]
6

BƯỚC 7. TRUY CẬP CÁC THUỘC TÍNH CỤ THỂ CỦA THẺ

We have learned that in one tag it could be many sub-tags, for example, If we run soup.header.div there are many sub-tags under the

, remember we only call the
under the so other tag under will not included.

đầu ra

# Define URL
url = ‘//webscraper.io/test-sites/e-commerce/allinone/computers/laptops'
# Ask hosting server to fetch url
requests.get[url]
7

Vì vậy, như chúng ta có thể thấy có nhiều thuộc tính trong một thẻ, câu hỏi đặt ra là làm thế nào để chỉ truy cập vào thuộc tính mà chúng ta muốn. Trong BeautifulSoup có một chức năng gọi là 'find' và 'find_all'. Để làm cho nó rõ ràng hơn, chúng tôi sẽ chỉ cho bạn cách sử dụng cả hai chức năng và những gì khác nhau. Ví dụ, chúng ta sẽ tìm thấy giá của từng sản phẩm. Để xác định mã giá là gì, bạn chỉ cần di chuyển con trỏ đến chỉ báo giá

Sau khi di chuyển con trỏ ta xác định được giá nằm trên thẻ h4 và lớp kéo giá sang phải

Quả sung. 8 Chỉ báo giá

Bây giờ chúng tôi muốn tìm kiếm chuỗi h4 bằng cách sử dụng find

# Define URL
url = ‘//webscraper.io/test-sites/e-commerce/allinone/computers/laptops'
# Ask hosting server to fetch url
requests.get[url]
8

đầu ra

# Define URL
url = ‘//webscraper.io/test-sites/e-commerce/allinone/computers/laptops'
# Ask hosting server to fetch url
requests.get[url]
9

Như chúng ta có thể thấy $295. 99 là thuộc tính [chuỗi] của h4. Nhưng làm thế nào nếu chúng ta sử dụng find_all

pages = requests.get[url]
pages.text
0

đầu ra

pages = requests.get[url]
pages.text
1

Bạn có nhận thấy sự khác biệt giữa find và find_all không?

Vâng, bạn đã đúng, find được sử dụng nếu bạn muốn tìm kiếm các thuộc tính cụ thể vì nó chỉ tạo ra một kết quả. Tuy nhiên, nếu bạn muốn thu thập dữ liệu với số lượng lớn [ví dụ: giá, tên sản phẩm, mô tả, v.v. ] sử dụng find_all là đúng cách

Chúng tôi cũng có thể cắt kết quả của find_all, ví dụ trong trường hợp này, chúng tôi chỉ muốn xem chỉ mục từ 3 đến 5

pages = requests.get[url]
pages.text
2

đầu ra

pages = requests.get[url]
pages.text
3

[. ] Hãy nhớ trong Python chỉ mục bắt đầu từ 0 và chỉ mục cuối cùng không được bao gồm

BƯỚC 8. SỬ DỤNG BỘ LỌC

Chúng tôi cũng có thể tìm thấy nhiều thẻ

pages = requests.get[url]
pages.text
4

Để biết thêm thông tin vì class và id là thuộc tính đặc biệt nên bạn có thể viết class_ và id thay vì ‘class’ hoặc ‘id’

Bằng cách sử dụng bộ lọc, chúng tôi có thể thu thập dữ liệu mà chúng tôi muốn từ trang web, trong trường hợp này, chúng tôi muốn thu thập tên, giá, đánh giá và mô tả. Vì vậy, chúng ta cần xác định các biến đầu tiên

pages = requests.get[url]
pages.text
5

Đầu ra theo tên

pages = requests.get[url]
pages.text
6

Sản lượng theo giá

pages = requests.get[url]
pages.text
7

Đầu ra của đánh giá

pages = requests.get[url]
pages.text
8

Đầu ra theo mô tả

pages = requests.get[url]
pages.text
9

BƯỚC 9. LÀM SẠCH KẾT QUẢ ĐẦU RA TỪ BỘ LỌC

Như chúng ta có thể thấy kết quả đầu ra vẫn ở định dạng HTML nên chúng ta cần xóa cái này và chỉ lấy chuỗi. Để làm điều này, chúng ta chỉ cần sử dụng chức năng văn bản

Văn bản có thể được sử dụng để lọc các chuỗi từ mã HTML, tuy nhiên, chúng ta cần xác định một biến mới, ví dụ:

# parser-lxml = Change html to Python friendly format
soup = BeautifulSoup[pages.text, ‘lxml’]
soup
0

Kết quả

# parser-lxml = Change html to Python friendly format
soup = BeautifulSoup[pages.text, ‘lxml’]
soup
1

Như chúng ta có thể thấy kết quả đầu ra chỉ là chuỗi từ mã, nhưng điều này là không đủ. Trong bước tiếp theo, chúng ta sẽ tìm hiểu cách cạo tất cả các chuỗi và đưa chúng vào danh sách

BƯỚC 10. TẠO MỘT VÒNG ĐẶT ĐỂ KIẾM CHUỖI VÀO DANH SÁCH

Đây là phần thú vị, để đưa tất cả các chuỗi vào danh sách, chúng ta cần tạo một vòng lặp for

# parser-lxml = Change html to Python friendly format
soup = BeautifulSoup[pages.text, ‘lxml’]
soup
2

BƯỚC 11. TẠO KHU VỰC CƠ SỞ TỪ DANH SÁCH

Được rồi sau khi chúng tôi tạo một vòng lặp for và tất cả các chuỗi đã được thêm vào danh sách, vì vậy bước cuối cùng là tạo một khung dữ liệu từ danh sách. Để tạo một khung dữ liệu, chúng ta cần nhập gấu trúc

# parser-lxml = Change html to Python friendly format
soup = BeautifulSoup[pages.text, ‘lxml’]
soup
3

Sau khi khung dữ liệu được tạo, bây giờ chúng ta có thể sử dụng dữ liệu này để thực hiện một dự án khoa học dữ liệu, chúng ta có thể đưa nó vào học máy, nhận thông tin chi tiết có giá trị từ nó hoặc bất cứ điều gì

Quả sung. 9 Khung dữ liệu

Đó 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 để trích xuất dữ liệu bảng HTML từ 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 .

Python có thể lấy dữ liệu từ một trang web không?

Khi thu thập dữ liệu từ các trang web bằng Python , bạn thường quan tâm đến các phần cụ thể của trang. Bằng cách dành thời gian xem qua tài liệu HTML, bạn có thể xác định các thẻ có thuộc tính duy nhất mà bạn có thể sử dụng để trích xuất dữ liệu mình cần.

Python có thể tương tác với HTML không?

Có thể chạy nhúng Python trong tài liệu HTML có thể được thực thi trong thời gian chạy .

Bạn có thể sử dụng Python để thu thập dữ liệu không?

Python là một trong những cách dễ nhất để bắt đầu vì đây là ngôn ngữ hướng đối tượng . Các lớp và đối tượng của Python dễ sử dụng hơn bất kỳ ngôn ngữ nào khác. Ngoài ra, nhiều thư viện tồn tại giúp việc xây dựng một công cụ quét web bằng Python trở nên dễ dàng.

Chủ Đề