Trong bài viết này, chúng tôi sẽ xây dựng một chương trình cho phép bạn quét hoặc lấy dữ liệu từ một trang web bằng tập lệnh Python. Phương pháp thu thập dữ liệu này được gọi là quét web. Gỡ bỏ web là tất cả về lập trình bằng cách sử dụng Python hoặc bất kỳ ngôn ngữ lập trình nào khác để tải xuống, làm sạch và sử dụng dữ liệu từ một trang web. Hầu hết các trang web không muốn bạn cạo dữ liệu của họ và để tìm hiểu điều gì là hợp pháp và được phép cạo, các trang web có một trang dành riêng hiển thị chi tiết về các điểm cuối được phép. Đính kèm tệp robots.txt vào cuối bất kỳ liên kết nào để tìm hiểu về các điểm cuối được phép. Ví dụ: hãy sử dụng . Kết quả sẽ như thế này với tệp văn bản dưới đây:
Ảnh chụp màn hình cho biết những điểm cuối nào chúng tôi được phép và không được phép lấy từ trang web YCombinator. Độ trễ thu thập thông tin có nghĩa là thời gian tạm dừng khi quét dữ liệu từ trang web bằng các chương trình, do đó không làm quá tải máy chủ của họ và làm chậm trang web vì liên tục quét. Trong bài tập này, chúng tôi lược bỏ trang chủ của nội dung tin tức, điều này chúng tôi có thể thực hiện tùy theo tác nhân người dùng.
Bắt đầu
Trình quét web Python yêu cầu hai mô-đun cần thiết để quét dữ liệu:
Súp đẹp
Beautiful Soup là một thư viện Python để trích xuất dữ liệu từ các tệp HTML. Nó sửa đổi tệp bằng trình phân tích cú pháp, biến dữ liệu thành tài liệu có giá trị và tiết kiệm cho các lập trình viên hàng giờ làm việc thủ công và lặp đi lặp lại.
Yêu cầu
Thư viện HTTP yêu cầu là để tải xuống các tệp HTML bằng cách sử dụng liên kết đến trang web với
.get()
hàm số.
Tạo Web Scraper
Bây giờ đến thực tế của dự án này. Tạo một thư mục mới và trong đó, một tệp sẽ chứa tất cả các tập lệnh cho chương trình quét web. Sao chép và dán mã sau:
# app.py import requests response = requests.get( '//news.ycombinator.com/news' ) yc_web_page = response.text print(yc_web_page)
Đoạn mã trên thực hiện những việc sau:
- Nhập khẩu
requests
mô-đun - Sử dụng biến phản hồi, các yêu cầu được đính kèm với
.get()
chức năng tải xuống các tệp HTML từ liên kết của trang web được cung cấp - Đọc nội dung của trang web với
.text
Nếu bạn chạy mã này bằng lệnh python
app.py
và nó không cung cấp cho bạn bất kỳ đầu ra nào, điều đó có nghĩa là hai mô-đun đã nhập cần được cài đặt. Chạy các lệnh sau để cài đặt các mô-đun.
pip3 install requests pip install beautifulsoup4
Kết quả của mã nguồn sẽ giống như sau:
Tiếp theo, hãy cập nhật
app.py
tệp với phần còn lại của mã bằng cách sử dụng súp đẹp:
# main.py import requests from bs4 import BeautifulSoup # add this
response = requests.get( '//news.ycombinator.com/news' ) yc_web_page = response.text # add this
soup = BeautifulSoup(yc_web_page, 'html.parser' ) article_tag = soup.find(name= "a" , class_= 'titlelink' ) article_title = article_tag.get_text() article_link = article_tag.get( 'href' ) article_upvote = soup.find(name= "span" , class_= "score" ).get_text() result = { "title" : article_title, "link" : article_link, "point" : article_upvote } print(result)
Thực hiện theo đoạn mã ở trên bằng cách thực hiện như sau ::
- Nhập chức năng BeautifulSoup từ mô-đun bs4
- Tiếp theo, sử dụng súp biến để phân tích cú pháp tài liệu từ
yc_web_page
bằng cách sử dụng chức năng BeautifulSoup và html.parser
để lấy các tệp HTML
Trước khi xem qua phần còn lại của mã, hãy mở trình duyệt web của chúng tôi bằng liên kết được cung cấp trong
.get()
Tiếp theo, nhấp chuột phải vào trang và nhấp vào kiểm tra để xem tab phần tử của trang tin tức YCombinator .
Trang web của chúng tôi sẽ trông như thế này:
Với Beautiful Soup, chúng tôi có thể nhắm mục tiêu các phần tử cụ thể trên trang với tên lớp của chúng:
- Bằng cách gán biến article_tag, mọi phần tử trang đều có tên thẻ bằng cách sử dụng
find()
chức năng với tên của phần tử, thẻ và class_
có dấu gạch dưới. Điều này được thực hiện để ngăn chặn việc ghi đè lớp trong phần tử trên trang web
- Bây giờ, chúng tôi muốn trích xuất một trong các tiêu đề liên kết của
article_tag
sử dụng .get_text()
hàm số - Tiếp theo, trích xuất liên kết của
article_tag
sử dụng thuộc tính href
với .get()
hàm số - Điều tương tự cũng áp dụng cho
article_upvote
biến, trong đó tên thẻ, <span>
, và tên lớp được sử dụng để trích xuất điểm cho mỗi liên kết bài viết - Tạo một kết quả biến sẽ hiển thị dữ liệu được trích xuất dưới dạng từ điển với cặp khóa và giá trị
- In ra kết quả cuối cùng
Với toàn bộ tập lệnh được viết, trang của chúng tôi sẽ lấy dữ liệu từ trang chủ tin tức của YCombinator và trông giống như sau:
Sự kết luận
Bài viết này đã hướng dẫn bạn cách sử dụng trình quét web Python để trích xuất dữ liệu từ một trang web. Ngoài ra, các chức năng của việc sử dụng công cụ quét web là nó tiết kiệm thời gian và công sức trong việc tạo ra các tập dữ liệu lớn nhanh hơn thay vì thủ công.
Tìm hiểu thêm