3. ỨNG DỤNG PHÂN TÍCH MỘT SỐ CÚ PHÁP ĐƠN GIẢN
3.3. Phân tích và thu thập các địa chỉ trên một trang web
Một chương trình mẫu đưa ra các định nghĩa và ứng dụng cho các biểu thức tag HTML được tạo ra bằng cách sử dụng chức năng makeHTMLTags. Rất hữu ích để thu thập dữ liệu từ các trang HTML.
Ví dụ sẽ sử dụng hàm makeHTMLTags để tạo ra thành phần phân tích <a> trong PyParsing, sử dụng để phân tích tìm kiếm tất cả các địa chỉ trong một trang web. Có thể sử dụng cách này một cách đệ quy để bò trườn thu thập tất cả các thông tin ở một độ sâu nào đó từ trang gốc.
# -*- coding: utf-8 -*-
import urllib import sys
from pyparsing import *
anchorStart,anchorEnd = makeHTMLTags("a")
# read HTML from a web page
serverListPage = urllib.urlopen( "http://www.google.com.vn/" ) htmlText = serverListPage.read()
serverListPage.close()
anchor = anchorStart + SkipTo(anchorEnd).setResultsName("body") + anchorEnd
for tokens,start,end in anchor.scanString(htmlText): print tokens.body,'->',tokens.href
input();# chờ xem kết quả
Hình 2.4. Danh sách nội dung địa chỉ trong trang web http://www.google.com.vn
Giải thích
Thư viện urllib là thư viện chuẩn của python cho phép truy xuất vào các địa chỉ trên web ( có thể sử dụng urllib2 cho các tính năng nâng cao).
Hàm makeHTMLTags("a") tạo 2 thành phần phân tích của tag <a> trong HTML ( một tag trong HTML chứa 2 thành phần bắt đầu và kết thúc).
Các lệnh tiếp theo là sử dụng urllib để mở một connection tới địa chỉ trang web ( dưới dạng một stream), sau đó đọc thông tin của trang web vào biến htmlText dưới dạng một chuỗi.
Anchor là một lớp đối tượng kiểu And thể hiện toàn bộ cú pháp của một anchor (tag <a>) trong nội dung HTML.
Cuối cùng là thực hiện phân tích bằng hàm scanString và xuất dữ liệu ra console.