Làm cách nào để phân tích cú pháp văn bản HTML bằng 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

page = requests.get('http://econpy.pythonanywhere.com/ex/001.html')
tree = html.fromstring(page.content)
3 và
page = requests.get('http://econpy.pythonanywhere.com/ex/001.html')
tree = html.fromstring(page.content)
4

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

page = requests.get('http://econpy.pythonanywhere.com/ex/001.html')
tree = html.fromstring(page.content)
5 để truy xuất trang web có dữ liệu của chúng tôi, phân tích cú pháp bằng mô-đun
page = requests.get('http://econpy.pythonanywhere.com/ex/001.html')
tree = html.fromstring(page.content)
6 và lưu kết quả trong
page = requests.get('http://econpy.pythonanywhere.com/ex/001.html')
tree = html.fromstring(page.content)
0

page = requests.get('http://econpy.pythonanywhere.com/ex/001.html')
tree = html.fromstring(page.content)

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

page = requests.get('http://econpy.pythonanywhere.com/ex/001.html')
tree = html.fromstring(page.content)
1 thay vì
page = requests.get('http://econpy.pythonanywhere.com/ex/001.html')
tree = html.fromstring(page.content)
2 vì
page = requests.get('http://econpy.pythonanywhere.com/ex/001.html')
tree = html.fromstring(page.content)
3 hoàn toàn mong đợi
page = requests.get('http://econpy.pythonanywhere.com/ex/001.html')
tree = html.fromstring(page.content)
4 làm đầu vào. )

page = requests.get('http://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('http://econpy.pythonanywhere.com/ex/001.html')
tree = html.fromstring(page.content)
6 như thế này

page = requests.get('http://econpy.pythonanywhere.com/ex/001.html')
tree = html.fromstring(page.content)
0

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

page = requests.get('http://econpy.pythonanywhere.com/ex/001.html')
tree = html.fromstring(page.content)
1

page = requests.get('http://econpy.pythonanywhere.com/ex/001.html')
tree = html.fromstring(page.content)
2

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 để phân tích cú pháp nội dung HTML bằng Python?

Ví dụ .
từ html. trình phân tích cú pháp nhập HTMLParser
Trình phân tích cú pháp lớp (HTMLParser)
# phương pháp nối thêm thẻ bắt đầu vào danh sách start_tags
def handle_starttag(bản thân, thẻ, attrs)
start_tags toàn cầu
start_tags. nối thêm (thẻ)
# phương pháp nối thêm thẻ kết thúc vào danh sách end_tags
def handle_endtag(bản thân, thẻ)

Làm cách nào để trích xuất văn bản từ thẻ HTML trong Python?

Cho một thẻ Chuỗi và HTML, trích xuất tất cả các chuỗi giữa thẻ được chỉ định. .
Input : 'Gfg is Best. I love Reading CS from it.' , tag = “br”.
đầu ra. ['Gfg', 'Tốt nhất', 'Đọc CS']
Giải trình. Tất cả các chuỗi giữa thẻ “br” được trích xuất

Làm cách nào để phân tích cú pháp nội dung HTML?

Đầu vào của quy trình phân tích cú pháp HTML bao gồm một luồng các điểm mã, sau đó được chuyển qua giai đoạn mã thông báo, tiếp theo là giai đoạn xây dựng cây để tạo đối tượng Tài liệu làm đầu ra

Làm cách nào để đọc HTML thô bằng Python?

Để trích xuất tệp HTML thô, chúng tôi chỉ cần chuyển URL trang web vào yêu cầu. hàm get() . Bây giờ chúng tôi có một tệp văn bản không có cấu trúc, chứa mã HTML được trích xuất từ ​​​​đường dẫn URL mà chúng tôi đã chuyển qua. Cách yêu cầu cung cấp đầu ra mã HTML khá lộn xộn để phân tích.