Dự án PyScript mới cho phép bạn nhúng trực tiếp các chương trình Python vào các trang HTML và thực thi chúng trong trình duyệt mà không cần bất kỳ yêu cầu dựa trên máy chủ nào
Dự án đã được công bố vào cuối tuần này tại PyCon US 2022 và hoạt động như một trình bao bọc xung quanh dự án Pyodide, tải trình thông dịch CPython dưới dạng mô-đun trình duyệt WebAssembly
"PyScript là một khung cho phép người dùng tạo các ứng dụng Python phong phú trong trình duyệt bằng cách sử dụng kết hợp Python với HTML tiêu chuẩn. " Anaconda giải thích trong một bài đăng gần đây trên blog
"PyScript nhằm mục đích cung cấp cho người dùng ngôn ngữ lập trình hạng nhất có quy tắc tạo kiểu nhất quán, biểu cảm hơn và dễ học hơn. "
Mặc dù dự án Pyodide trước đây cho phép bạn chạy Python trong trình duyệt, nhưng phải mất một thời gian để làm quen với cú pháp và không thanh lịch bằng việc chỉ viết một chương trình Python và dán nó vào trang HTML của bạn
Tuy nhiên, PyScript hoạt động như một trình bao bọc, cho phép bạn nhúng trực tiếp mã Python vào giữa các thẻ
import requests
from bs4 import BeautifulSoup
vgm_url = '//www.vgmusic.com/music/console/nintendo/nes/'
html_text = requests.get[vgm_url].text
soup = BeautifulSoup[html_text, 'html.parser']
5 và để mã này tự động thực thi bởi PyodideVí dụ: phần sau đây minh họa một ví dụ Hello World nhỏ sử dụng PyScript và việc thực thi nó trực tiếp trong trình duyệt. Lưu ý cách hàm
import requests
from bs4 import BeautifulSoup
vgm_url = '//www.vgmusic.com/music/console/nintendo/nes/'
html_text = requests.get[vgm_url].text
soup = BeautifulSoup[html_text, 'html.parser']
6 cho phép bạn xuất dữ liệu trực tiếp sang phần tử HTMLNhà phát triển cũng có thể mở rộng các trang PyScript thông qua các gói Python bổ sung được tích hợp trong Pyodide hoặc thông qua các gói được lưu trữ trên hệ thống tệp cục bộ. PyScript BẮT ĐẦU. md cung cấp tài liệu về cách nhập các gói vào mã của bạn
Ngoài việc thực thi mã được nhúng trong HTML, bạn cũng có thể thêm trình chỉnh sửa mã trực tiếp vào trang HTML bằng cách sử dụng thẻ
import requests
from bs4 import BeautifulSoup
vgm_url = '//www.vgmusic.com/music/console/nintendo/nes/'
html_text = requests.get[vgm_url].text
soup = BeautifulSoup[html_text, 'html.parser']
7 để bạn có thể nhập mã và thực thi mã, như minh họa bên dướiSử dụng trình chỉnh sửa giúp dễ dàng kiểm tra mã một cách nhanh chóng và xem những gì sẽ và không hoạt động với PyScript
Mặc dù JavaScript đã có thể thực hiện hầu hết mọi thứ bạn muốn tạo bằng PyScript, với Python được coi là ngôn ngữ lập trình phổ biến nhất, PyScript mở ra cơ hội cho nhiều dự án thú vị trong tương lai
Để bắt đầu với PyScript, bạn có thể truy cập trang dự án GitHub của họ, trang này cũng bao gồm nhiều ví dụ về mã
Internet có nhiều loại thông tin đáng kinh ngạc cho tiêu dùng của con người. Nhưng dữ liệu này thường khó truy cập theo chương trình nếu nó không ở dạng API REST chuyên dụng. Với các công cụ Python như Beautiful Soup, bạn có thể cạo và phân tích cú pháp dữ liệu này trực tiếp từ các trang web để sử dụng cho các dự án và ứng dụng của mình
Hãy sử dụng ví dụ về quét dữ liệu MIDI từ internet để huấn luyện mạng thần kinh với Magenta có thể tạo ra âm nhạc cổ điển của Nintendo. Để làm điều này, chúng tôi sẽ cần một bộ nhạc MIDI từ các trò chơi Nintendo cũ. Sử dụng Beautiful Soup, chúng tôi có thể lấy dữ liệu này từ Kho lưu trữ âm nhạc trò chơi điện tử
Bắt đầu và thiết lập các phụ thuộc
Trước khi tiếp tục, bạn cần đảm bảo rằng bạn đã cài đặt phiên bản cập nhật của Python 3 và pip. Đảm bảo bạn tạo và kích hoạt trước khi cài đặt bất kỳ phụ thuộc nào
Bạn sẽ cần cài đặt thư viện Yêu cầu để thực hiện các yêu cầu HTTP nhằm lấy dữ liệu từ trang web và Beautiful Soup để phân tích cú pháp qua HTML
Khi môi trường ảo của bạn được kích hoạt, hãy chạy lệnh sau trong thiết bị đầu cuối của bạn
pip install requests==2.22.0 beautifulsoup4==4.8.1
Chúng tôi đang sử dụng Beautiful Soup 4 vì đây là phiên bản mới nhất và Beautiful Soup 3 không còn được phát triển hoặc hỗ trợ nữa
Sử dụng Yêu cầu để cạo dữ liệu cho Beautiful Soup để phân tích cú pháp
Trước tiên, hãy viết một số mã để lấy HTML từ trang web và xem cách chúng ta có thể bắt đầu phân tích cú pháp qua nó. Đoạn mã sau sẽ gửi một yêu cầu
import requests
from bs4 import BeautifulSoup
vgm_url = '//www.vgmusic.com/music/console/nintendo/nes/'
html_text = requests.get[vgm_url].text
soup = BeautifulSoup[html_text, 'html.parser']
8 đến trang web mà chúng ta muốn và tạo một đối tượng BeautifulSoup bằng HTML từ trang đóimport requests
from bs4 import BeautifulSoup
vgm_url = '//www.vgmusic.com/music/console/nintendo/nes/'
html_text = requests.get[vgm_url].text
soup = BeautifulSoup[html_text, 'html.parser']
Với đối tượng
import requests
from bs4 import BeautifulSoup
vgm_url = '//www.vgmusic.com/music/console/nintendo/nes/'
html_text = requests.get[vgm_url].text
soup = BeautifulSoup[html_text, 'html.parser']
9 này, bạn có thể điều hướng và tìm kiếm thông qua HTML cho dữ liệu mà bạn muốn. Ví dụ: nếu bạn chạy import requests
from bs4 import BeautifulSoup
vgm_url = '//www.vgmusic.com/music/console/nintendo/nes/'
html_text = requests.get[vgm_url].text
soup = BeautifulSoup[html_text, 'html.parser']
0 sau mã trước đó trong trình bao Python, bạn sẽ nhận được tiêu đề của trang web. Nếu bạn chạy import requests
from bs4 import BeautifulSoup
vgm_url = '//www.vgmusic.com/music/console/nintendo/nes/'
html_text = requests.get[vgm_url].text
soup = BeautifulSoup[html_text, 'html.parser']
1, bạn sẽ thấy tất cả văn bản trên trangLàm quen với Beautiful Soup
Các và phương pháp là một trong những vũ khí mạnh nhất trong kho vũ khí của bạn.
import requests
from bs4 import BeautifulSoup
vgm_url = '//www.vgmusic.com/music/console/nintendo/nes/'
html_text = requests.get[vgm_url].text
soup = BeautifulSoup[html_text, 'html.parser']
2 rất phù hợp với những trường hợp bạn biết chỉ có một yếu tố mà bạn đang tìm kiếm, chẳng hạn như thẻ import requests
from bs4 import BeautifulSoup
vgm_url = '//www.vgmusic.com/music/console/nintendo/nes/'
html_text = requests.get[vgm_url].text
soup = BeautifulSoup[html_text, 'html.parser']
0. Trên trang này, import requests
from bs4 import BeautifulSoup
vgm_url = '//www.vgmusic.com/music/console/nintendo/nes/'
html_text = requests.get[vgm_url].text
soup = BeautifulSoup[html_text, 'html.parser']
1 sẽ cung cấp cho bạn văn bản từ phần tử HTML cho quảng cáo biểu ngữimport requests
from bs4 import BeautifulSoup
vgm_url = '//www.vgmusic.com/music/console/nintendo/nes/'
html_text = requests.get[vgm_url].text
soup = BeautifulSoup[html_text, 'html.parser']
2 là phương pháp phổ biến nhất mà bạn sẽ sử dụng trong cuộc phiêu lưu tìm kiếm trang web của mình. Sử dụng điều này, bạn có thể duyệt qua tất cả các siêu liên kết trên trang và in các URL của chúngfor link in soup.find_all['a']:
print[link.get['href']]
Bạn cũng có thể cung cấp các đối số khác nhau cho
import requests
from bs4 import BeautifulSoup
vgm_url = '//www.vgmusic.com/music/console/nintendo/nes/'
html_text = requests.get[vgm_url].text
soup = BeautifulSoup[html_text, 'html.parser']
3, chẳng hạn như cụm từ thông dụng hoặc thuộc tính thẻ để lọc tìm kiếm của bạn một cách cụ thể như bạn muốn. Bạn có thể tìm thấy rất nhiều tính năng thú vị trong tài liệuPhân tích cú pháp và điều hướng HTML với BeautifulSoup
Trước khi viết thêm mã để phân tích nội dung mà chúng ta muốn, trước tiên hãy xem HTML được trình duyệt hiển thị. Mỗi trang web đều khác nhau và đôi khi để có được dữ liệu phù hợp từ chúng đòi hỏi một chút sáng tạo, nhận dạng mẫu và thử nghiệm
Mục tiêu của chúng tôi là tải xuống một loạt các tệp MIDI, nhưng có rất nhiều bản nhạc trùng lặp trên trang web này cũng như các bản phối lại của các bài hát. Chúng tôi chỉ muốn một trong mỗi bài hát và vì cuối cùng chúng tôi muốn sử dụng dữ liệu này để huấn luyện mạng thần kinh nhằm tạo ra nhạc Nintendo chính xác, nên chúng tôi sẽ không muốn huấn luyện nó trên các bản phối lại do người dùng tạo
Khi bạn đang viết mã để phân tích cú pháp qua một trang web, việc sử dụng các công cụ dành cho nhà phát triển có sẵn cho bạn trong hầu hết các trình duyệt hiện đại thường rất hữu ích. Nếu bạn nhấp chuột phải vào phần tử mà bạn quan tâm, bạn có thể kiểm tra HTML đằng sau phần tử đó để tìm ra cách bạn có thể truy cập dữ liệu bạn muốn theo chương trình
Hãy sử dụng phương pháp
import requests
from bs4 import BeautifulSoup
vgm_url = '//www.vgmusic.com/music/console/nintendo/nes/'
html_text = requests.get[vgm_url].text
soup = BeautifulSoup[html_text, 'html.parser']
3 để duyệt qua tất cả các liên kết trên trang nhưng sử dụng các biểu thức chính quy để lọc qua chúng để chúng tôi chỉ nhận được các liên kết chứa tệp MIDI có văn bản không có dấu ngoặc đơn, điều này sẽ cho phép chúng tôi loại trừ tất cả các bản sao Tạo một tệp có tên
import requests
from bs4 import BeautifulSoup
vgm_url = '//www.vgmusic.com/music/console/nintendo/nes/'
html_text = requests.get[vgm_url].text
soup = BeautifulSoup[html_text, 'html.parser']
5 và thêm đoạn mã sau vào đóimport re
import requests
from bs4 import BeautifulSoup
vgm_url = '//www.vgmusic.com/music/console/nintendo/nes/'
html_text = requests.get[vgm_url].text
soup = BeautifulSoup[html_text, 'html.parser']
if __name__ == '__main__':
attrs = {
'href': re.compile[r'\.mid$']
}
tracks = soup.find_all['a', attrs=attrs, string=re.compile[r'^[[?!\[].]*$']]
count = 0
for track in tracks:
print[track]
count += 1
print[len[tracks]]
Điều này sẽ lọc qua tất cả các tệp MIDI mà chúng tôi muốn trên trang, in ra thẻ liên kết tương ứng với chúng, sau đó in bao nhiêu tệp chúng tôi đã lọc
Chạy mã trong thiết bị đầu cuối của bạn bằng lệnh
import requests
from bs4 import BeautifulSoup
vgm_url = '//www.vgmusic.com/music/console/nintendo/nes/'
html_text = requests.get[vgm_url].text
soup = BeautifulSoup[html_text, 'html.parser']
6Tải xuống các tệp MIDI mà chúng tôi muốn từ trang web
Bây giờ chúng tôi có mã làm việc để lặp qua mọi tệp MIDI mà chúng tôi muốn, chúng tôi phải viết mã để tải xuống tất cả chúng
Trong
import requests
from bs4 import BeautifulSoup
vgm_url = '//www.vgmusic.com/music/console/nintendo/nes/'
html_text = requests.get[vgm_url].text
soup = BeautifulSoup[html_text, 'html.parser']
5, hãy thêm một hàm vào mã của bạn có tên là import requests
from bs4 import BeautifulSoup
vgm_url = '//www.vgmusic.com/music/console/nintendo/nes/'
html_text = requests.get[vgm_url].text
soup = BeautifulSoup[html_text, 'html.parser']
8 và gọi hàm đó cho từng rãnh trong vòng lặp lặp qua chúngimport requests
from bs4 import BeautifulSoup
vgm_url = '//www.vgmusic.com/music/console/nintendo/nes/'
html_text = requests.get[vgm_url].text
soup = BeautifulSoup[html_text, 'html.parser']
3Trong hàm
import requests
from bs4 import BeautifulSoup
vgm_url = '//www.vgmusic.com/music/console/nintendo/nes/'
html_text = requests.get[vgm_url].text
soup = BeautifulSoup[html_text, 'html.parser']
8 này, chúng ta chuyển đối tượng Beautiful Soup đại diện cho phần tử HTML của liên kết đến tệp MIDI, cùng với một số duy nhất để sử dụng trong tên tệp để tránh xung đột đặt tên có thể xảy raChạy mã này từ một thư mục mà bạn muốn lưu tất cả các tệp MIDI và xem màn hình thiết bị đầu cuối của bạn hiển thị tất cả 2230 MIDI mà bạn đã tải xuống [tại thời điểm viết bài này]. Đây chỉ là một ví dụ thực tế cụ thể về những gì bạn có thể làm với Beautiful Soup
Phạm vi rộng lớn của World Wide Web
Giờ đây, bạn có thể lập trình lấy mọi thứ từ các trang web, bạn có quyền truy cập vào nguồn dữ liệu khổng lồ cho bất kỳ dự án nào của bạn cần. Một điều cần lưu ý là những thay đổi đối với HTML của trang web có thể làm hỏng mã của bạn, vì vậy hãy đảm bảo luôn cập nhật mọi thứ nếu bạn đang xây dựng ứng dụng trên nền tảng này
Nếu bạn đang tìm kiếm thứ gì đó để làm với dữ liệu bạn vừa lấy từ Kho lưu trữ âm nhạc trò chơi điện tử, bạn có thể thử sử dụng các thư viện Python như Mido để làm việc với dữ liệu MIDI để dọn dẹp dữ liệu đó hoặc sử dụng Magenta để huấn luyện mạng thần kinh với dữ liệu đó
Tôi rất mong được thấy những gì bạn xây dựng. Vui lòng liên hệ và chia sẻ kinh nghiệm của bạn hoặc đặt bất kỳ câu hỏi nào