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ư
- ĐẹpSoup4
- yêu cầu
- gấu trúc
- 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
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 URL0
url = ‘//webscraper.io/test-sites/e-commerce/allinone/computers/laptops'# Ask hosting server to fetch url
requests.get[url]
Đượ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 URL1
url = ‘//webscraper.io/test-sites/e-commerce/allinone/computers/laptops'# Ask hosting server to fetch url
requests.get[url]
đầu ra
# Define URL2
url = ‘//webscraper.io/test-sites/e-commerce/allinone/computers/laptops'# Ask hosting server to fetch url
requests.get[url]
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 URL3
url = ‘//webscraper.io/test-sites/e-commerce/allinone/computers/laptops'# Ask hosting server to fetch url
requests.get[url]
đầu ra
# Define URL4
url = ‘//webscraper.io/test-sites/e-commerce/allinone/computers/laptops'# Ask hosting server to fetch url
requests.get[url]
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 URL5
url = ‘//webscraper.io/test-sites/e-commerce/allinone/computers/laptops'# Ask hosting server to fetch url
requests.get[url]
đầu ra
# Define URL6
url = ‘//webscraper.io/test-sites/e-commerce/allinone/computers/laptops'# Ask hosting server to fetch url
requests.get[url]
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
đầu ra
# Define URL7
url = ‘//webscraper.io/test-sites/e-commerce/allinone/computers/laptops'# Ask hosting server to fetch url
requests.get[url]
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 URL8
url = ‘//webscraper.io/test-sites/e-commerce/allinone/computers/laptops'# Ask hosting server to fetch url
requests.get[url]
đầu ra
# Define URL9
url = ‘//webscraper.io/test-sites/e-commerce/allinone/computers/laptops'# Ask hosting server to fetch url
requests.get[url]
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
1Bạ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
6Sả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
9BƯỚ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
0Kết quả
# parser-lxml = Change html to Python friendly format
soup = BeautifulSoup[pages.text, ‘lxml’]
soup
1Như 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
2BƯỚ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
3Sau 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