Trong một bài viết trước, tôi đã hướng dẫn bạn cách sử dụng Yêu cầu mô-đun để truy cập các trang web bằng Python. Hướng dẫn đó đã đề cập đến rất nhiều chủ đề như tạo các yêu cầu GET/POST và tải về các nội dung như hình ảnh hoặc tệp PDF bằng cách lập trình. Một điều còn thiếu trong hướng dẫn đó là về kỹ thuật cạo [trích xuất nội dung] trang web mà bạn đã truy cập bằng Yêu cầu trích xuất thông tin mà bạn cần
Trong hướng dẫn này, bạn sẽ được khám phá về Beautiful Soup, một thư viện Python để trích xuất dữ liệu từ các tệp HTML. Trọng tâm của hướng dẫn này là nghiên cứu các kiến thức cơ bản của thư viện, và các chủ đề nâng cao sẽ được đề cập trong hướng dẫn tiếp theo. Xin lưu ý rằng hướng dẫn này sử dụng Beautiful Soup 4 cho tất cả các ví dụ
Cài đặt
Bạn có thể cài đặt Beautiful Soup 4 bằng
$ pip install beautifulsoup479. Tên gói là
$ pip install beautifulsoup480. Nó sẽ làm việc trên cả Python 2 và Python 3
1
$ pip install beautifulsoup4
Nếu bạn chưa cài đặt pip trên hệ thống của mình, bạn có thể trực tiếp tải về nguồn tarball của Beautiful Soup 4 và cài đặt nó bằng
$ pip install beautifulsoup481
1
$ python setup.py install
BeautifulSoup ban đầu được đóng gói như là mã của Python 2. Khi bạn cài đặt nó để sử dụng với Python 3, nó sẽ tự động cập nhật mã của Python 3. Mã sẽ không được chuyển đổi trừ khi bạn cài đặt gói. Dưới đây là một số biến phổ biến lỗi mà bạn có thể bắt gặp
$ pip install beautifulsoup4
82 "No module named HTMLParser" xảy ra khi bạn chạy phiên bản Python 2 của mã Python 3$ pip install beautifulsoup4
82 "Không có mô-đun có tên html. parser" xảy ra khi bạn chạy phiên bản Python 3 của mã Python 2
Cả hai lỗi trên đều có thể được giải quyết bằng cách gỡ cài đặt và cài đặt lại Beautiful Soup
Cài đặt Parser
Trước khi thảo luận về sự khác biệt giữa các trình phân tích cú pháp khác nhau mà bạn có thể sử dụng tương tự với Beautiful Soup, hãy viết mã để tạo ra một soup
1
$ pip install beautifulsoup40
$ pip install beautifulsoup41
$ pip install beautifulsoup42
$ pip install beautifulsoup43
Đối tượng
$ pip install beautifulsoup484 có thể nhận hai đối số. Đối số đầu tiên là đánh dấu sự thật, và đối số thứ hai là trình phân tích cú pháp mà bạn muốn sử dụng. Các trình phân tích cú pháp khác nhau là.
$ pip install beautifulsoup485, lxml và html5lib.
$ pip install beautifulsoup486 has two version, a HTML parser and a XML parser
$ pip install beautifulsoup485 là một trình phân tích cú pháp được tích hợp sẵn và nó không hoạt động tốt trong các phiên bản cũ của Python. Bạn có thể cài đặt các trình phân tích cú pháp khác nhau bằng các lệnh sau
1
$ pip install beautifulsoup40
$ pip install beautifulsoup41
$ pip install beautifulsoup42
Trình phân tích cú pháp
$ pip install beautifulsoup486 rất nhanh và có thể được sử dụng để nhanh chóng phân tích HTML. Mặt khác, trình phân tích cú pháp
$ pip install beautifulsoup489 rất chậm, nhưng nó cũng cực kỳ dễ sử dụng. Dưới đây là một ví dụ về việc sử dụng từng trình phân tích cú pháp này
1
$ pip install beautifulsoup43
$ pip install beautifulsoup41_______06
$ pip install beautifulsoup42
$ pip install beautifulsoup48
$ pip install beautifulsoup49
10
11
12
$ pip install beautifulsoup46
14
15
16
17
18
19
$ pip install beautifulsoup46
$ python setup.py install1
$ python setup.py install2
$ python setup.py install3
$ pip install beautifulsoup48
$ python setup.py install5
$ python setup.py install6
$ python setup.py install7
$ python setup.py install8
$ pip install beautifulsoup46
10
11
Những sự khác biệt chỉ được đưa ra trong ví dụ trên chỉ có vấn đề khi bạn phân tích HTML không hợp lệ. Tuy nhiên, hầu hết HTML trên web không đúng định dạng, và nắm bắt được những khác biệt này sẽ giúp bạn loại bỏ lỗi một số phân tích lỗi và trình phân tích cú pháp quyết định mà bạn muốn sử dụng trong một dự án. Nói chung, trình phân tích cú pháp
$ pip install beautifulsoup486 là một lựa chọn rất tốt
Các đối tượng trong Beautiful Soup
Beautiful Soup phân tích tài liệu HTML đã cho Python một cây các đối tượng. Có bốn đối tượng Python chính mà bạn cần biết. ________ 091, ________ 092, ________ 084 và ________ 094
Đối tượng
$ pip install beautifulsoup491 chỉ về một thẻ XML hoặc HTML có thật trong tài liệu. Bạn có thể truy cập vào tên của thẻ bằng
$ pip install beautifulsoup496. Bạn có thể đặt tên thành một cái gì đó khác. Thay đổi tên sẽ được hiển thị trong đánh dấu do Beautiful Soup tạo ra
Bạn có thể truy cập các thuộc tính khác nhau như class và id của thẻ bằng
$ pip install beautifulsoup497 và
$ pip install beautifulsoup498 tương ứng. Bạn cũng có thể truy cập vào toàn bộ từ điển của các thuộc tính bằng cách sử dụng
$ pip install beautifulsoup499. Bạn cũng có thể thêm, xóa hoặc sửa đổi các thuộc tính của thẻ. Các thuộc tính như
100 của một phần tử có thể lấy nhiều giá trị được lưu trữ dưới dạng một danh sách
Văn bản bên trong một thẻ được lưu trữ như một
$ pip install beautifulsoup492 trong Beautiful Soup. Nó có một số phương thức hữu ích như
102 để thay thế văn bản trong thẻ. Bạn cũng có thể chuyển đổi một
$ pip install beautifulsoup492 thành unicode bằng cách sử dụng
104
Beautiful Soup cũng cho phép bạn truy cập các bình luận trong một trang web. Nhận xét này được lưu trữ dưới dạng một đối tượng
$ pip install beautifulsoup494, về cơ bản cũng là
$ pip install beautifulsoup492
Bạn đã học về các đối tượng
$ pip install beautifulsoup484 trong phần trước. Nó được sử dụng để đại diện cho toàn bộ tài liệu. Vì nó không phải là một đối tượng thực tế, nên nó không có bất kỳ tên hoặc thuộc tính nào
Get Title, Heading và Link
Bạn có thể trích xuất tiêu đề trang và dữ liệu khác rất dễ dàng bằng Beautiful Soup. Vui lòng trích xuất trang Wikipedia về Python. Trước tiên, bạn phải lấy đánh dấu được đánh dấu của trang web bằng cách sử dụng mã sau đây dựa trên hướng dẫn về Yêu cầu mô-đun để truy xuất các trang web
1
13
$ pip install beautifulsoup41_______10
$ pip install beautifulsoup42
$ pip install beautifulsoup49
18
10
$ pip install beautifulsoup400
Bây giờ bạn đã tạo súp, bạn có thể lấy tiêu đề của trang web bằng cách sử dụng mã sau
1
$ pip install beautifulsoup402
$ pip install beautifulsoup41
$ pip install beautifulsoup404
$ pip install beautifulsoup42
$ pip install beautifulsoup49
$ pip install beautifulsoup407
10
$ pip install beautifulsoup409
12
14
$ pip install beautifulsoup412
16
$ pip install beautifulsoup414
Bạn có thể trích xuất các thông tin khác của trang web như tiêu đề hoặc đoạn văn đầu tiên, các lớp của chúng, hoặc thuộc tính
108
1
$ pip install beautifulsoup416
$ pip install beautifulsoup41
$ pip install beautifulsoup418
$ pip install beautifulsoup42
$ pip install beautifulsoup49
$ pip install beautifulsoup421
10
$ pip install beautifulsoup423
12
14
$ pip install beautifulsoup426
16
$ pip install beautifulsoup428
17
19
$ pip install beautifulsoup431
$ python setup.py install1
$ pip install beautifulsoup433
$ python setup.py install3
$ python setup.py install5
$ pip install beautifulsoup436
$ python setup.py install6
$ pip install beautifulsoup438
$ python setup.py install8
10
11
12
13
14
15
16
17
18
19
$ pip install beautifulsoup416
$ pip install beautifulsoup401
$ pip install beautifulsoup402
Tương tự như vậy, bạn có thể lặp qua tất cả các liên kết hoặc tiêu đề con trong một tài liệu bằng mã sau
1
$ pip install beautifulsoup404
$ pip install beautifulsoup41
$ pip install beautifulsoup406
$ pip install beautifulsoup42
$ pip install beautifulsoup408
$ pip install beautifulsoup49
$ pip install beautifulsoup410
Điều hướng trên DOM
Bạn có thể điều hướng trên cây DOM bằng tên thẻ thông thường. Việc móc nối các thẻ tên có thể giúp bạn điều hướng cây sâu hơn. Ví dụ, bạn có thể lấy liên kết đầu tiên trong đoạn đầu của trang Wikipedia cho trước bằng
109. Tất cả các liên kết trong đoạn văn bản đầu tiên đều có thể được truy cập bằng
110
Bạn cũng có thể truy xuất tất cả các lỗi của thẻ thành một danh sách sử dụng
111. To have been cons at a tools only, you can use
112. Bạn cũng có thể bật qua các dấu hiệu của một thẻ bằng thuộc tính
113
Cả
113 và
115 chỉ hữu ích khi bạn muốn truy cập trực tiếp hoặc cấp đầu tiên của một thẻ. To have been all of cons, you may be used by
116
_______2
$ pip install beautifulsoup412
$ pip install beautifulsoup41
$ pip install beautifulsoup414
$ pip install beautifulsoup42
$ pip install beautifulsoup49
$ pip install beautifulsoup417
10
$ pip install beautifulsoup419
12
14
$ pip install beautifulsoup422
16
$ pip install beautifulsoup424
17
$ pip install beautifulsoup426
19
$ pip install beautifulsoup428
$ python setup.py install1
$ pip install beautifulsoup430
$ python setup.py install3
$ pip install beautifulsoup428
$ python setup.py install5
$ pip install beautifulsoup430
$ python setup.py install6
$ pip install beautifulsoup428_______68
$ pip install beautifulsoup438
Bạn cũng có thể truy cập vào phần tử cha của một phần tử bằng thuộc tính
117. Tương tự như vậy, bạn có thể truy cập vào tất cả các phần tử cha của một phần tử bằng cách sử dụng thuộc tính
118. Phần tử cha của thẻ cấp cao nhất
119 chính là đối tượng
$ pip install beautifulsoup484, và cha của nó là Không có
1
$ pip install beautifulsoup440
$ pip install beautifulsoup41
$ pip install beautifulsoup442
$ pip install beautifulsoup42
$ pip install beautifulsoup49
$ pip install beautifulsoup445
10
$ pip install beautifulsoup447
12
$ pip install beautifulsoup442
14
$ pip install beautifulsoup442
16
$ pip install beautifulsoup442
17
$ pip install beautifulsoup455
19
$ pip install beautifulsoup457
$ python setup.py install1
$ pip install beautifulsoup459
Bạn có thể truy cập phần tử của anh chị em trước và sau của một phần tử bằng các thuộc tính của
121 và
122
Đối với hai phần tử để được là anh chị em, chúng nhất thiết phải có cùng một phần tử cha. Điều này có nghĩa là đầu tiên của một phần tử sẽ không có anh chị em trước. Tương tự, phần tử con cuối cùng của một phần tử sẽ không có anh chị em kế tiếp. Trong các trang web có thật, các anh chị em đi trước và tiếp theo của một phần tử có thể sẽ là một ký tự xuống dòng
You can also it through all anh chị em của một phần tử bằng
123 and
124
1
$ pip install beautifulsoup461
$ pip install beautifulsoup41
$ pip install beautifulsoup463
$ pip install beautifulsoup42
$ pip install beautifulsoup49
$ pip install beautifulsoup466
10
$ pip install beautifulsoup468
12
14
$ pip install beautifulsoup471
16
$ pip install beautifulsoup473
17
19
$ pip install beautifulsoup476
$ python setup.py install1
$ pip install beautifulsoup478
Bạn có thể tìm thấy phần tử ngay sau phần tử hiện tại bằng thuộc tính
125. Để truy cập vào phần tử xuất hiện ngay trước phần tử hiện tại, hãy sử dụng thuộc tính
126
Tương tự như vậy, bạn có thể lặp lại tất cả các phần tử trước và sau phần tử hiện tại bằng cách sử dụng
127 và
128 tương ứng
tóm tắt
Sau khi đọc xong hướng dẫn này, bạn đã hiểu rõ hơn về sự khác biệt chính giữa các trình phân tích cú pháp HTML khác nhau. Bây giờ bạn còn có thể điều hướng trên một trang web và trích xuất các dữ liệu quan trọng. Điều này có thể hữu ích khi bạn muốn phân tích tất cả các chủ đề hoặc liên kết trên một trang web nhất định
Trong phần tiếp theo của loạt bài này, bạn sẽ được học cách sử dụng thư viện Beautiful Soup để tìm kiếm và sửa đổi DOM