paint-brush
Làm thế nào để xây dựng một trình quét web Python: Cạo dữ liệu từ bất kỳ trang web nàoby@terieyenike
8,445
8,445

Làm thế nào để xây dựng một trình quét web Python: Cạo dữ liệu từ bất kỳ trang web nào

Teri Eyenike4m2022/09/08
Read on Terminal Reader
Read this story w/o Javascript

Python 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. 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. Trong bài thực hành 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. Với toàn bộ kịch bản đượ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.
featured image - Làm thế nào để xây dựng một trình quét web Python: Cạo dữ liệu từ bất kỳ trang web nào
Teri Eyenike HackerNoon profile picture

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 https://news.ycombinator.com/robots.txt .

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
  • Yêu cầ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( 'https://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( 'https://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ẻ
     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