Trích xuất thẻ HTML Python

Các trang web được viết bằng HTML, có nghĩa là mỗi trang web là một tài liệu có cấu trúc. Đôi khi sẽ thật tuyệt nếu có được một số dữ liệu từ chúng và bảo toàn cấu trúc trong khi chúng tôi đang ở đó. Các trang web không phải lúc nào cũng cung cấp dữ liệu của họ ở các định dạng thoải mái như CSV hoặc JSON

Đây là nơi quét web đến. Quét web là cách sử dụng chương trình máy tính để sàng lọc một trang web và thu thập dữ liệu bạn cần ở định dạng hữu ích nhất cho bạn đồng thời bảo toàn cấu trúc của dữ liệu

lxml và Yêu cầu

lxml là một thư viện khá phong phú được viết để phân tích cú pháp các tài liệu XML và HTML rất nhanh, thậm chí xử lý các thẻ bị rối trong quá trình này. Chúng tôi cũng sẽ sử dụng mô-đun Yêu cầu thay vì mô-đun urllib2 đã được tích hợp sẵn do những cải tiến về tốc độ và khả năng đọc. Bạn có thể dễ dàng cài đặt cả hai bằng cách sử dụng pip install lxmlpip install requests

Hãy bắt đầu với việc nhập khẩu

from lxml import html
import requests

Tiếp theo, chúng tôi sẽ sử dụng requests.get để truy xuất trang web có dữ liệu của chúng tôi, phân tích cú pháp bằng cách sử dụng mô-đun html và lưu kết quả vào

page = requests.get['//econpy.pythonanywhere.com/ex/001.html']
tree = html.fromstring[page.content]
0

page = requests.get['//econpy.pythonanywhere.com/ex/001.html']
tree = html.fromstring[page.content]

[Chúng tôi cần sử dụng

page = requests.get['//econpy.pythonanywhere.com/ex/001.html']
tree = html.fromstring[page.content]
1 thay vì
page = requests.get['//econpy.pythonanywhere.com/ex/001.html']
tree = html.fromstring[page.content]
2 vì
page = requests.get['//econpy.pythonanywhere.com/ex/001.html']
tree = html.fromstring[page.content]
3 ngầm mong đợi
page = requests.get['//econpy.pythonanywhere.com/ex/001.html']
tree = html.fromstring[page.content]
4 làm đầu vào. ]

page = requests.get['//econpy.pythonanywhere.com/ex/001.html']
tree = html.fromstring[page.content]
0 hiện chứa toàn bộ tệp HTML trong một cấu trúc cây đẹp mắt mà chúng ta có thể thực hiện theo hai cách khác nhau. XPath và CSSSelect. Trong ví dụ này, chúng tôi sẽ tập trung vào cái trước

XPath là một cách định vị thông tin trong các tài liệu có cấu trúc như tài liệu HTML hoặc XML. Giới thiệu tốt về XPath có trên W3Schools

Ngoài ra còn có nhiều công cụ khác nhau để lấy XPath của các phần tử, chẳng hạn như FireBug cho Firefox hoặc Trình kiểm tra Chrome. Nếu đang sử dụng Chrome, bạn có thể nhấp chuột phải vào một phần tử, chọn 'Kiểm tra phần tử', đánh dấu mã, nhấp chuột phải lần nữa và chọn 'Sao chép XPath'

Sau khi phân tích nhanh, chúng tôi thấy rằng trong trang của chúng tôi, dữ liệu được chứa trong hai phần tử – một là div có tiêu đề 'tên người mua' và phần còn lại là một khoảng có lớp 'giá mặt hàng'

________số 8_______

Biết được điều này, chúng ta có thể tạo truy vấn XPath chính xác và sử dụng hàm lxml

page = requests.get['//econpy.pythonanywhere.com/ex/001.html']
tree = html.fromstring[page.content]
6 như thế này

#This will create a list of buyers:
buyers = tree.xpath['//div[@title="buyer-name"]/text[]']
#This will create a list of prices
prices = tree.xpath['//span[@class="item-price"]/text[]']

Hãy xem những gì chúng ta có chính xác

print['Buyers: ', buyers]
print['Prices: ', prices]

Buyers:  ['Carson Busses', 'Earl E. Byrd', 'Patty Cakes',
'Derri Anne Connecticut', 'Moe Dess', 'Leda Doggslife', 'Dan Druff',
'Al Fresco', 'Ido Hoe', 'Howie Kisses', 'Len Lease', 'Phil Meup',
'Ira Pent', 'Ben D. Rules', 'Ave Sectomy', 'Gary Shattire',
'Bobbi Soks', 'Sheila Takya', 'Rose Tattoo', 'Moe Tell']

Prices:  ['$29.95', '$8.37', '$15.26', '$19.25', '$19.25',
'$13.99', '$31.57', '$8.49', '$14.47', '$15.86', '$11.11',
'$15.98', '$16.27', '$7.50', '$50.85', '$14.26', '$5.68',
'$15.00', '$114.07', '$10.09']

Xin chúc mừng. Chúng tôi đã loại bỏ thành công tất cả dữ liệu chúng tôi muốn từ một trang web bằng cách sử dụng lxml và Yêu cầu. Chúng tôi lưu nó trong bộ nhớ dưới dạng hai danh sách. Bây giờ chúng ta có thể làm tất cả những thứ hay ho với nó. chúng ta có thể phân tích nó bằng Python hoặc chúng ta có thể lưu nó vào một tệp và chia sẻ nó với mọi người

Một số ý tưởng thú vị hơn để suy nghĩ là sửa đổi tập lệnh này để lặp lại qua các trang còn lại của tập dữ liệu mẫu này hoặc viết lại ứng dụng này để sử dụng các luồng nhằm cải thiện tốc độ

Làm cách nào để trích xuất dữ liệu từ các thẻ HTML trong Python?

Một cách để trích xuất thông tin từ HTML của trang web là sử dụng các phương thức chuỗi . Chẳng hạn, bạn có thể sử dụng. find[] để tìm kiếm các thẻ

Làm cách nào để tìm nạp nội dung HTML bằng Python?

Giải pháp đơn giản nhất là như sau. .
yêu cầu nhập khẩu. in [yêu cầu. nhận được [url = 'https. //Google. com']. chữ].
nhập urllib. yêu cầu như r. trang = r. urlopen['https. //Google. com'].
nhập urllib. yêu cầu như r. trang = r. urlopen['https. //Google. com'].
.

Chủ Đề