Phục vụ khác của BeautifulSoup (phần 2)

Phục vụ khác của BeautifulSoup (tiếp tục)

Hãy tạo một web scraper ví dụ cái scrape trang nằm tại http://www.pythonscraping.com/pages/warandpeace.html.
Trên trang này, các dòng nói theo các nhân vật trong câu chuyện có màu đỏ, trong khi các tên của các nhân
vật có màu xanh. Bạn có thể thấy các tag span, cái tham chiếu các classes CSS phù hợp, trong mẫu sau của
mã nguồn của trang:

<span class=”red”>Heavens! what a virulent attack!</span> replied
<span class=”green”>the prince</span>, not in the least disconcerted
by this reception.

Bạn có thể thu nhặt toàn bộ trang và tạo một BeautifulSoup object với nó sử dụng một chương trình tương tự như
cái trong học phần trước:

from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen(‘http://www.pythonscraping.com/pages/warandpeace.html’)
bs = BeautifulSoup(html.read(), ‘html.parser’)

Sử dụng BeautifulSoup object này, bạn có thể sử dụng hàm find_all để rút ra một Python list các nouns đúng bằng
cách chọn chỉ text bên trong <span class=”green”></span> tags (find_all là một hàm cực kì linh động bạn sẽ sử
dụng nhiều sau này trong các học phần):

nameList = bs.find_all(‘span’, {‘class’:’green’})
for name in nameList:

print(name.get_text())

Khi được chạy, nó sẽ liệt kê tất cả nouns đúng trong text, trong trật tự chúng xuất hiện trong War and Peace. Nó
làm việc như thế nào? Ở trên, bạn đã gọi bs.tagName để nhận cái xuất hiện đầu tiên của tag đó trên trang. Bây
giờ, bạn gọi bs.find_all(tagName,tagAttributes) để nhận một list tất cả các tags trên trang, hơn là cái
đầu tiên.
Sau khi nhận một list các names, chương trình lặp qua tất cả các names trong list và in ra name.get_text()
để chia tách nội dung từ các tags.
Khi nào get_text() và khi nào giữ các tags
.get_text() lột bỏ tất cả các tags khỏi tài liệu bạn đang làm việc với và trả về một Unicode string chứa chỉ
text. Ví dụ, nếu bạn đang làm việc với một khối lớn các text cái chứa nhiều siêu liên kết, đoạn và các
tags khác, tất cả những cái đó sẽ bị lột bỏ, và bạn được để lại với một khối text không tag.
Giữ trong đầu rằng nó là dễ dàng hơn nhiều để tìm thấy cái bạn đang tìm kiếm trong một BeautifulSoup object
hơn là trong một khối text. Gọi .get_text() nên là thứ cuối cùng bạn làm, ngay lập tức trước khi bạn in
ra, lưu giữ hay thao tác xử lí dữ liệu cuối cùng của bạn. Nói chung, bạn nên thử giữ cấu trúc tag của tài
liệu lâu như có thể.

Chia sẻ