Python trích xuất các thẻ HTML

Quét web mô tả khả năng trích xuất hoặc "cạo" dữ liệu từ internet bằng chương trình tự động. Các chương trình này tiến hành truy vấn web và truy xuất dữ liệu HTML, sau đó được phân tích cú pháp để lấy thông tin cần thiết

Cho dù bạn cần thu thập một lượng lớn dữ liệu, dữ liệu từ nhiều nguồn hay dữ liệu không có sẵn thông qua API, việc tự động trích xuất thông tin này có thể giúp bạn tiết kiệm rất nhiều thời gian và công sức

Trong hướng dẫn này, bạn sẽ học cách sử dụng thư viện Parsel Python để tạo các tập lệnh quét web của riêng bạn. Cụ thể, bạn sẽ học cách phân tích tài liệu HTML bằng Bộ chọn và cách trích xuất dữ liệu từ đánh dấu HTML bằng CSS và XPath. Bạn cũng sẽ tìm hiểu về cách xóa các phần tử bằng cách sử dụng đối tượng bộ chọn. Đến cuối bài viết, bạn sẽ có thể tạo các tập lệnh cạo của riêng mình và các biểu thức phức tạp để truy xuất dữ liệu từ một trang web bằng thư viện Parsel

Triển khai Parsel

Để sử dụng thư viện Parsel, trước tiên bạn phải cài đặt nó trong môi trường ảo;

Để cài đặt

source env\Scripts\activate
4, hãy chạy lệnh sau trong thiết bị đầu cuối của bạn


pip install venv

Tiếp theo, tạo một môi trường ảo mới có tên

source env\Scripts\activate
5

python -m venv env

Sau đó sử dụng lệnh sau để kích hoạt môi trường ảo của bạn

source env\Scripts\activate

Bạn sẽ thấy

source env\Scripts\activate
6 trong thiết bị đầu cuối, điều này cho biết rằng môi trường ảo đã được kích hoạt. Bây giờ hãy cài đặt thư viện Parsel trong môi trường ảo mới tạo bằng lệnh sau

pip install parsel

Để lấy nội dung trang web, bạn cũng cần cài đặt thư viện yêu cầu HTTP

pip install requests

Sau khi cài đặt cả hai thư viện

source env\Scripts\activate
7 và
source env\Scripts\activate
8, bạn đã sẵn sàng bắt đầu viết mã

Bắt đầu với Parsel

Tại đây, bạn sẽ tạo một tệp mới có tên my_scraper. py, nhập các mô-đun thích hợp, sau đó sử dụng Yêu cầu để lấy mã HTML của trang web. Bạn sẽ sử dụng trang web

source env\Scripts\activate
9 để chạy tập lệnh cạo trên

Python trích xuất các thẻ HTML
Python trích xuất các thẻ HTML


Để tham khảo, bạn sẽ xem mã HTML của trang web bằng cách sử dụng

pip install parsel
0

Python trích xuất các thẻ HTML
Python trích xuất các thẻ HTML


Nhập mã sau vào my_scraper mới của bạn. tập tin py

import parsel 
import requests

URL = "https://quotes.toscrape.com/"

response = requests.get(URL).text

Tạo bộ chọn

Bây giờ bạn sẽ tạo một thể hiện của lớp

pip install parsel
1 tích hợp bằng cách sử dụng phản hồi được trả về bởi thư viện Yêu cầu. Lớp Selector cho phép bạn trích xuất dữ liệu từ các tài liệu HTML hoặc XML bằng cách sử dụng CSS và XPath bằng cách lấy một đối số bắt buộc có tên là
pip install parsel
2. Sau khi tạo đối tượng bộ chọn, tài liệu HTML được phân tích cú pháp theo cách mà sau đó bạn có thể truy vấn nó bằng các biểu thức CSS và XPath. Nối tệp của bạn với dòng mã sau để tạo đối tượng bộ chọn

selector = parsel.Selector(text=response)

Để chơi với lớp Bộ chọn của Parsel, bạn cần chạy Python ở chế độ tương tác. Điều này rất quan trọng vì nó giúp bạn không phải viết nhiều câu lệnh in chỉ để kiểm tra tập lệnh của mình. Để nhập REPL, hãy chạy tệp Python có cờ -i trong thiết bị đầu cuối

python -i my_scraper.py

Sau khi chạy lệnh trên, bạn sẽ thấy

pip install parsel
3 trong thiết bị đầu cuối của mình, điều này cho biết bạn đã vào chế độ tương tác thành công

Trích xuất văn bản bằng bộ chọn CSS

Nhập mã sau vào trình bao để trích xuất tiêu đề của trang

>>> selector.css('title') 
[<Selector xpath='descendant-or-self::title' data='<title>Quotes to Scrape</title>'>]
>>>

Tại đây, một đối số truy vấn được chuyển đến hàm

pip install parsel
4, có thể là tên của thẻ, lớp hoặc id. Bạn đã chọn thẻ tiêu đề từ tài liệu HTML trong đoạn mã trước, đoạn mã này trả về một đối tượng SelectorList; . Trong trường hợp này, chỉ có một thẻ tiêu đề. Nếu bạn nhìn vào đầu ra, bạn sẽ nhận thấy rằng nó không tiết lộ nội dung của thẻ tiêu đề. Thư viện Parsel bao gồm các hàm có tên là
pip install parsel
5 và
pip install parsel
6 để hiển thị nội dung của thẻ tiêu đề. Các hàm này tuần tự hóa phần tử Bộ chọn để chỉ hiển thị nội dung của đối tượng

Chạy dòng mã sau trong trình bao

>>> selector.css('title::text').get()

Bạn sẽ thấy đầu ra sau

python -m venv env
0

Phần tử giả CSS

pip install parsel
7 được sử dụng để chọn nút
pip install parsel
8 của một phần tử. Tương tự, bạn có thể sử dụng
pip install parsel
9 cho lớp,
pip install requests

0 để chọn id và
pip install requests

1 để tìm kiếm bằng thuộc tính của thẻ và giá trị của nó. Dưới đây là một số ví dụ cho mỗi;

Để nhận tất cả các thẻ

pip install requests

2 với lớp
pip install requests

3 và chỉ nhận nút văn bản bên trong, hãy chạy mã này

python -m venv env
1

Để lấy thẻ đầu tiên có id

pip install requests

4 và chỉ nhận nút văn bản bên trong, hãy chạy lệnh sau

python -m venv env
2

Cuối cùng, để lấy tất cả các thẻ có thuộc tính

pip install requests

5 với giá trị
pip install parsel
2, hãy chạy mã này

python -m venv env
3

Điều đáng chú ý là hàm

pip install parsel
5 tuần tự hóa phần tử đầu tiên trong đối tượng SelectorList, trong khi hàm
pip install parsel
6 đi qua từng Bộ chọn trong SelectorList và trả về danh sách có dữ liệu được tuần tự hóa cho từng Bộ chọn

Trích xuất văn bản bằng bộ chọn XPath

Trong Parsel, bộ chọn XPath cũng có thể được sử dụng để trích xuất văn bản. Bộ chọn CSS cực kỳ mạnh mẽ và hiệu quả và chúng thường dễ đọc hơn bộ chọn XPath. Sự lựa chọn giữa XPath và CSS là vấn đề sở thích cá nhân. Điểm khác biệt chính là các bộ chọn CSS chỉ có thể di chuyển trong chuỗi phân cấp, nhưng các bộ chọn XPath có thể di chuyển lên và xuống trong cấu trúc phân cấp đánh dấu

Nhập đoạn mã sau vào trình bao để nhận tất cả các thẻ div có lớp

pip install requests

9 trên trang web

python -m venv env
4

Bạn sẽ nhận được một cái gì đó như thế này sau khi chạy đoạn mã trên

python -m venv env
5

Trong XPath, mọi truy vấn phải bắt đầu bằng

import parsel 
import requests

URL = "https://quotes.toscrape.com/"

response = requests.get(URL).text
0 và phải thêm
import parsel 
import requests

URL = "https://quotes.toscrape.com/"

response = requests.get(URL).text
0 để vào phần tử con. Thuộc tính và giá trị được truyền trong ____12_______2, với ____12_______3 ở phía trước tên thuộc tính. Để mở rộng truy vấn trên, hãy nhập mã sau vào trình bao. Điều này trả về tất cả các câu trích dẫn trong thẻ
import parsel 
import requests

URL = "https://quotes.toscrape.com/"

response = requests.get(URL).text
4 có lớp
pip install parsel
2 trong thẻ
import parsel 
import requests

URL = "https://quotes.toscrape.com/"

response = requests.get(URL).text
6 có lớp
import parsel 
import requests

URL = "https://quotes.toscrape.com/"

response = requests.get(URL).text
7

python -m venv env
6

Bạn sẽ thấy đầu ra sau

python -m venv env
7

Văn bản bên trong của phần tử được lấy bằng phương pháp

import parsel 
import requests

URL = "https://quotes.toscrape.com/"

response = requests.get(URL).text
8. Chức năng này cũng có thể được sử dụng để khớp văn bản

Để có được tất cả các trích dẫn của “Albert Einstein”, hãy nhập truy vấn Parsel sau vào trình bao

python -m venv env
8

Trong truy vấn ở trên, bạn có thể thấy rằng mình đang sử dụng XPath để điều hướng lên cấu trúc phân cấp. Đầu tiên, bạn chọn các yếu tố có tác giả “Albert Einstein”, sau đó bạn đi lên cấu trúc phân cấp để xem tất cả các trích dẫn. Cuối cùng, hàm

pip install parsel
6 được sử dụng để tuần tự hóa đối tượng bộ chọn để chỉ hiển thị câu lệnh trích dẫn. Đây là điểm khác biệt quan trọng nhất giữa bộ chọn CSS và XPath

Loại bỏ các yếu tố

Thư viện Parsel cũng có chức năng loại bỏ các phần tử khỏi đối tượng bộ chọn. Cần thận trọng khi sử dụng hàm

selector = parsel.Selector(text=response)
0 vì một khi các phần tử đã bị xóa, chúng không thể được phục hồi. Tuy nhiên, hàm
selector = parsel.Selector(text=response)
1 có thể hữu ích để giảm kích thước của phản hồi trong bộ nhớ

Trước tiên, bạn sẽ phải kiểm tra xem đối tượng selector có một ____12_______6 với lớp ____15_______3 hay không

python -m venv env
9

Đoạn mã trên sẽ tạo ra đầu ra sau

source env\Scripts\activate
0

Bây giờ bạn có thể loại bỏ

import parsel 
import requests

URL = "https://quotes.toscrape.com/"

response = requests.get(URL).text
6 với lớp
selector = parsel.Selector(text=response)
3 bằng cách sử dụng hàm
selector = parsel.Selector(text=response)
1

source env\Scripts\activate
1

Sau khi chạy đoạn mã trước, kiểm tra đối tượng bộ chọn bằng đoạn mã sau sẽ dẫn đến một danh sách trống vì phần tử đã bị xóa khỏi đối tượng bộ chọn

source env\Scripts\activate
2

Tạo tập lệnh cạo web của bạn

Cho đến bây giờ, bạn đã làm việc trong REPL để kiểm tra các lựa chọn CSS và XPath của Parsel. Trong phần này, bạn sẽ tạo một chương trình trích xuất từng trích dẫn từ trang web và lưu trữ các trích dẫn đó trong một tệp văn bản được định dạng đẹp mắt

Tại đây, bạn sẽ cạo từng phần trích dẫn một và lấy văn bản bên trong, tác giả và thẻ của trích dẫn. Vì bạn đang lưu trữ tất cả các trích dẫn trong tệp văn bản, nên bạn sẽ phải mở tệp ở chế độ

selector = parsel.Selector(text=response)
7 bằng cách sử dụng khối
selector = parsel.Selector(text=response)
8. Nhập mã sau vào tệp Python của bạn

source env\Scripts\activate
3

Sử dụng đoạn mã trên, thông tin báo giá sẽ được trích xuất và lưu dưới dạng tệp văn bản. Cần lưu ý rằng truy vấn XPath chứa một dấu chấm (

pip install parsel
9) ở đầu. Điều này rất quan trọng vì nó được sử dụng để truy vấn phiên bản của Bộ chọn theo kiểu tương đối hơn là tìm kiếm toàn bộ trang web

Khi bạn chạy mã này, một dấu ngoặc kép tuyệt vời. txt sẽ được tạo sau khi trích xuất thành công các trích dẫn

Python trích xuất các thẻ HTML
Python trích xuất các thẻ HTML


Nếu bạn thấy một tệp có nội dung như trên, xin chúc mừng bạn đã tạo trình quét web đầu tiên của mình bằng thư viện Parsel. Parsel có nhiều chức năng hữu ích;

Phần kết luận

Mặc dù các thư viện như Beautiful Soup, Scrapy và Selenium có thể quá mức cần thiết, nhưng Parsel là một lựa chọn tuyệt vời để quét web đơn giản. Các phương thức và Bộ chọn đơn giản của Parsel cung cấp tất cả các chức năng cần thiết cho các tập lệnh cạo cơ bản, trong khi các thư viện khác chứa một loạt các tính năng mà bạn sẽ không bao giờ sử dụng trong một tập lệnh cạo đơn giản—chẳng hạn như tự động hóa trình duyệt, bảng điều khiển telnet, ghi nhật ký và email.

Trong bài đăng này, bạn đã tìm hiểu về các tính năng chính của thư viện Parsel, bao gồm lớp Bộ chọn và hai phương thức để trích xuất các phần tử từ đối tượng bộ chọn của bạn. CSS và XPath. Bạn cũng đã xem cách bộ tuần tự hóa hoạt động

pip install parsel
5 và
pip install parsel
6 trích xuất dạng có thể đọc được của các phần tử và tìm kiếm văn bản được bảo hiểm cũng như thứ tự phân cấp phần tử. Cuối cùng, bạn đã sử dụng thư viện Parsel và các khả năng xử lý tệp của Python để phát triển một trình quét web chính thức trích xuất tất cả các trích dẫn trong một tệp văn bản. Bây giờ bạn đã học được những điều cơ bản, hãy dành chút thời gian để chơi với thư viện Parsel bằng cách phát triển các công cụ dọn dẹp phức tạp hơn

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

Gửi yêu cầu HTTP GET tới URL của trang web mà bạn muốn thu thập, yêu cầu này sẽ phản hồi bằng nội dung HTML . Chúng ta có thể làm điều này bằng cách sử dụng thư viện Request của Python. Tìm nạp và phân tích dữ liệu bằng Beautifulsoup và duy trì dữ liệu trong một số cấu trúc dữ liệu như Dict hoặc List.

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').
<. loại tài liệu html>. <

Làm cách nào để trích xuất HTML bằng Beautifulsoup?

Trong bài viết này, chúng ta sẽ tìm hiểu cách cạo dữ liệu bằng Beautiful Soup. .
Bước 1. Cài đặt. Beautiful Soup có thể được cài đặt bằng lệnh pip. .
Bước 2. Kiểm tra nguồn. Bước tiếp theo là kiểm tra trang web mà bạn muốn cạo. .
Bước 3. Lấy nội dung HTML. Tiếp theo, lấy nội dung HTML từ một trang web

Làm cách nào để trích xuất HTML từ chuỗi?

Làm cách nào để trích xuất thẻ HTML từ Chuỗi bằng biểu thức chính quy trong Java? .
Tạo một đối tượng Mẫu bằng cách chuyển biểu thức chính quy đại diện cho thẻ HTML được yêu cầu cho nó làm tham số cho phương thức compile() của lớp Mẫu
Ghép nó với Chuỗi mong muốn bằng cách sử dụng phương thức đối sánh () của lớp Mẫu