BeautifulSoup là gì? Phân tích và Người chọn Python

BeautifulSoup là gì?

Scrapeless Web Unlocker có thể trả về HTML của trang công khai cho các chương trình Python sử dụng BeautifulSoup làm lớp phân tích.

Tóm tắt

  • BeautifulSoup là một thư viện Python dùng để phân tích HTML và XML. Nó trình bày đánh dấu dưới dạng một cây có thể điều hướng.
  • BeautifulSoup không lấy trang hoặc thực thi JavaScript. Một thành phần khác phải cung cấp đánh dấu.
  • Phần backend của trình phân tích cú pháp ảnh hưởng đến cây. Chọn và ghim một backend khi các tài liệu bị sai định dạng là quan trọng.
  • Các bộ chọn cần một ranh giới bản ghi. Tìm kiếm trường phạm vi bên trong một mục và xác thực các giá trị yêu cầu.

BeautifulSoup, thường được nhập từ gói beautifulsoup4 với tên gọi bs4, phân tích cú pháp đánh dấu thành một cây các thẻ, thuộc tính và văn bản. Mã Python có thể tìm kiếm cây đó, đi qua các phần tử cha và anh chị em, và trích xuất giá trị từ các phần tử được chọn. Nó hữu ích cho việc đọc một trang HTML như nội dung có cấu trúc chứ không coi nó như một chuỗi không phân biệt.

Thư viện có một ranh giới chính xác. Nó không thực hiện yêu cầu HTTP tự nó, và việc phân tích thẻ script không làm cho đoạn mã được thực thi. Một khách hàng HTTP, tệp cục bộ, hoặc trình hiển thị phải cung cấp HTML. Chất lượng của kết quả sau đó phụ thuộc vào cả hai bên của ranh giới đó: đại diện mà bạn đã có và các bộ chọn mà bạn đã viết cho nó.

Cách BeautifulSoup Biến Đánh Dấu Thành Cây

Một trình phân tích cú pháp đọc đánh dấu và tạo ra các nút cho các phần tử và văn bản. BeautifulSoup công khai các nút đó dưới dạng thẻ và chuỗi có thể điều hướng, với các phương thức và thuộc tính để di chuyển qua cấu trúc phân cấp. tài liệu chính thức của Beautiful Soup giải thích các phương pháp tìm kiếm, bộ chọn CSS, thuộc tính và điều hướng cây. Cây là một mô hình của đánh dấu đã cung cấp, không phải là DOM trình duyệt trực tiếp.

Hãy tưởng tượng một thẻ sản phẩm với một bộ bọc bài viết, một tiêu đề, một liên kết và một khoảng giá. BeautifulSoup có thể tìm thấy bài viết, sau đó chỉ tìm kiếm bên trong bài viết đó cho các trường. Điều này giữ nguyên mối quan hệ giữa các giá trị. Nếu giá không có, thẻ sẽ vẫn là một bản ghi với một trường tùy chọn bị thiếu thay vì khiến mọi giá sau này ghép với tiêu đề sai.

Parser cũng có thể hiển thị các bình luận, kịch bản và markup ẩn. Việc chọn mọi nút văn bản mà không hiểu ngữ cảnh có thể kéo theo điều hướng, thông báo pháp lý hoặc dữ liệu nhúng vào một kết quả. Bắt đầu từ một khung ý nghĩa và viết một sơ đồ nhỏ. Một bộ chọn tốt là một tuyên bố về cấu trúc trang nào đại diện cho bản ghi bạn muốn. Mô hình biểu diễn HTTP nhắc chúng ta kiểm tra nội dung nhận được và siêu dữ liệu của nó trước khi tin tưởng trình phân tích.

Các bộ phân tích cú pháp và HTML bị lỗi

BeautifulSoup ủy thác việc phân tích cho một backend. Trình phân tích html.parser tích hợp sẵn của Python có sẵn ngay; các backend khác có thể có yêu cầu cài đặt và hành vi phục hồi khác nhau. Việc nhúng không hợp lệ, thiếu thẻ đóng và các đoạn tài liệu bất thường có thể tạo ra các cây khác nhau dưới các trình phân tích khác nhau. Ghim backend trong mã và kiểm tra nó với các markup nguồn đại diện thay vì dựa vào bất kỳ trình phân tích nào tình cờ được cài đặt.

Python’s tài liệu tham khảo html.parser mô tả một giao diện sự kiện cấp thấp. BeautifulSoup cung cấp một lớp tìm kiếm và điều hướng cấp cao hơn trên một trình phân tích đã chọn. Sự phân biệt này quan trọng khi một dự án cần lý luận về một tài liệu bị lỗi cụ thể: chuyển đổi backend có thể thay đổi cha của một thẻ, điều này thay đổi một bộ chọn có phạm vi ngay cả khi trang trình duyệt hiện có nhìn tương tự.

Một trình duyệt có thể sửa chữa HTML theo các quy tắc phân tích của riêng nó và sau đó cho phép JavaScript sửa đổi DOM một lần nữa. BeautifulSoup phân tích phản hồi thô có thể do đó tạo ra một cây khác từ một bức tranh chụp được ghi lại sau khi trình duyệt thực thi. Trước khi đổ lỗi cho một bộ chọn, hãy so sánh chính xác đầu vào được truyền đến trình phân tích với đánh dấu mà bạn đã kiểm tra trong công cụ phát triển.

Tìm, Tìm tất cả và Chọn CSS

find trả về phần tử phù hợp đầu tiên trong phạm vi tìm kiếm, trong khi find_all trả về các kết quả phù hợp. select áp dụng một bộ chọn CSS vào cây, và select_one trả về một phần tử phù hợp. Chọn hình thức biểu đạt câu hỏi rõ ràng. Một điều kiện đơn giản về thẻ và thuộc tính có thể dễ hiểu hơn với find; một mối quan hệ như một liên kết bên trong một thẻ có thể dễ hiểu hơn dưới dạng bộ chọn CSS.

Các bộ chọn nên ngắn gọn và có ý nghĩa. Một thẻ bài viết ngữ nghĩa, thuộc tính dữ liệu ổn định, hoặc mối quan hệ tiêu đề đã biết thường ít dễ hỏng hơn so với một chuỗi lớp được tạo ra. Khi một mục có thể có nhiều liên kết, hãy xác định liên kết mà vai trò của nó khớp với sơ đồ thay vì chọn liên kết đầu tiên. Kiểm tra cả văn bản liên kết và điểm đến. Giải quyết một href tương đối dựa vào URL trang cuối cùng để tránh phát hành một bản ghi bị hỏng.

Chuyển đổi văn bản là một hoạt động riêng biệt. get_text có thể thu thập văn bản từ các phần tử con, nhưng khoảng cách và nội dung ẩn cần được xem xét. Bảo tồn chuỗi gốc khi dấu câu, đơn vị hoặc tiền tệ cần chính xác; sử dụng giá trị hiển thị chuẩn hóa cho phân tích. Kết quả của select là một danh sách các nút, không tự động là một tập dữ liệu hợp lệ.

Khi chọn một liên kết, hãy phân biệt giữa văn bản hiển thị và điểm đến. Một thẻ có thể chứa liên kết điều hướng, liên kết hình ảnh, và liên kết hành động với các mục tiêu khác nhau. Chọn một cái phù hợp với khóa bản ghi, giải quyết nó với URL trang cuối cùng và xác minh tên miền hoặc đường dẫn. Nếu trang có một liên kết chính thống, đừng giả định rằng mọi href của thẻ đã là chính thống. Giữ href thô và URL đã chuẩn hóa có thể giúp dễ dàng chẩn đoán các thay đổi nguồn sau này.

Những gì BeautifulSoup không thể làm

BeautifulSoup không thể thực thi JavaScript trên một trang, mở một phiên trình duyệt, nhấp vào một điều khiển, hoặc chờ phản hồi mạng. Nếu HTML ban đầu thiếu các hồ sơ mục tiêu, thư viện sẽ phân tích tài liệu chưa hoàn chỉnh đó một cách trung thực. Đầu tiên hãy kiểm tra xem một điểm cuối có cấu trúc phù hợp có chứa dữ liệu hay không; nếu không, hãy lấy HTML đã được render bằng cách sử dụng một đường dẫn có khả năng trình duyệt.

Cái tài liệu Web Unlocker JS Render miêu tả một tùy chọn thực thi trình duyệt có thể trả về HTML. BeautifulSoup sau đó có thể phân tích văn bản đã được trả về. Sự phân chia công việc này hữu ích: thu thập giải quyết việc truy cập và render, trong khi trình phân tích Python sở hữu việc chọn lựa và chuẩn hóa các trường. Bạn vẫn cần xác minh rằng kết quả đã được render đạt trạng thái trang kỳ vọng.

Một cây đã được phân tích cũng không thể xác định liệu việc thu thập có được phép hay không. Điều khoản trang web, nghĩa vụ bảo mật, và tải trọng hoạt động thuộc về quy trình làm việc xung quanh. Nó cũng không thể quyết định liệu một mức giá có còn hiệu lực hay một tiêu đề có phải là tiêu đề sản phẩm chính xác hay không mà không có quy tắc chấp nhận ở cấp độ hồ sơ. Hãy coi trình phân tích như một công cụ cho cấu trúc, không phải là đảm bảo sự thật kinh doanh.

Một Quy Trình Làm Việc BeautifulSoup Đáng Tin Cậy

Đầu tiên, hãy xác định các trường đầu ra và dấu hiệu trang yêu cầu. Lấy một trang được phép, kiểm tra URL cuối, trạng thái và loại phương tiện, và kiểm tra một mẫu của thân trang. Sau đó, tạo một soup với một trình phân tích rõ ràng. Chọn các thùng chứa hồ sơ và đọc các trường bên trong mỗi thùng chứa. Chuẩn hóa giá trị, giải quyết URL, xác minh các trường yêu cầu, và ghi lại các mục bị từ chối. Lưu các hồ sơ đã chấp nhận với ngữ cảnh nguồn khi trường hợp sử dụng cần khả năng truy tìm.

Đối với việc trích xuất lặp lại, giữ hai kiểm tra. Một bài kiểm tra cấp độ trình phân tích sử dụng văn bản đại diện đã lưu để xác minh các bộ chọn. Một kiểm tra thu thập trực tiếp nhỏ xác nhận trang hiện tại vẫn trả về danh tính và cấu trúc kỳ vọng. Nếu chỉ bài kiểm tra trình phân tích thành công, một bức tường đăng nhập mới hoặc phản hồi đã thay đổi vẫn có thể khiến công việc sản xuất trở nên rỗng. Nếu chỉ kiểm tra trực tiếp thành công mà không có kiểm tra trường, công việc có thể âm thầm lưu trữ các giá trị sai.

Đầu ra của trình phân tích cũng cần các giới hạn rõ ràng. Một trang với nội dung rất lớn hoặc văn bản bị lỗi lồng nhau sâu có thể tiêu tốn thời gian và bộ nhớ bất ngờ. Đặt một giới hạn kích thước phản hồi hợp lý trong lớp thu thập và tránh thu thập toàn bộ văn bản trang khi một phần tử có phạm vi là đủ. Điều này giữ cho bước phân tích có thể dự đoán được trong khi để lại một chẩn đoán rõ ràng khi một trang nguồn phát triển vượt ra ngoài hình dạng kỳ vọng.

Cái trang sản phẩm Web Unlocker miêu tả việc thu thập trang công cộng, trong khi hướng dẫn BeautifulSoup dẫn dắt qua các lựa chọn thu thập tĩnh và động. Sử dụng những lựa chọn đó để giữ cho trình phân tích đơn giản: nó nên nhận được HTML đúng và trả về một hồ sơ đã được xác minh, không đoán xem trang đã đạt đến trạng thái đó như thế nào.

Kết luận

BeautifulSoup là một giao diện Python thực tiễn cho một cây phân tích HTML hoặc XML. Điểm mạnh của nó là tìm kiếm, duyệt qua, và trích xuất từ văn bản đã được cung cấp. Chọn một nền tảng trình phân tích, xác định các bộ chọn cho các hồ sơ, và xác minh đường dẫn thu thập trang trước khi tin tưởng vào tập dữ liệu kết quả.

Kết Nối Việc Lấy HTML Với Phân Tích Python

Sử dụng một đường dẫn thu thập Scrapeless đã được tài liệu hóa và phân tích một phản hồi đã được xác minh thành một lược đồ hồ sơ nhỏ.

Đăng ký ngay hôm nay và nhận được $5 tín dụng miễn phí — không cần thẻ tín dụng.

Nhận Tín Dụng $5 Của Bạn →

Câu hỏi thường gặp

BeautifulSoup có phải là một trình duyệt web không?

Không. BeautifulSoup phân tích văn bản đã được cung cấp thành một cây có thể duyệt. Nó không thực thi các kịch bản, quản lý một trang trực tiếp, hoặc nhấp vào các điều khiển. Một trình duyệt hoặc trình render là một thành phần thu thập tách biệt.

BeautifulSoup có lấy một URL không?

Không. Sử dụng một khách hàng HTTP, một tệp cục bộ, hoặc một dịch vụ render để có được văn bản trước. Xác nhận phản hồi là trang dự định trước khi truyền nội dung của nó cho BeautifulSoup.

Phương pháp nào của BeautifulSoup mà tôi nên sử dụng?

Sử dụng find hoặc find_all cho các truy vấn thẻ và thuộc tính trực tiếp, và select hoặc select_one cho các truy vấn cấu trúc theo kiểu CSS. Chọn phương pháp cho rõ ràng ranh giới hồ sơ và kiểm tra nó với văn bản đại diện.

Có thể lựa chọn trình phân tích thay đổi kết quả không?

Có. Các nền tảng có thể sửa chữa HTML bị lỗi khác nhau, tạo ra các mối quan hệ cha con khác nhau. Ghi lại trình phân tích được chọn và kiểm tra các bộ chọn với các loại trang mà quy trình làm việc thực sự nhận được.

BeautifulSoup có thể phân tích HTML đã được render không?

Có. Khi một thành phần có khả năng trình duyệt cung cấp ảnh chụp HTML cuối cùng, BeautifulSoup có thể phân tích nó. Nó không thực hiện việc render bản thân, và quy trình làm việc vẫn phải xác nhận rằng ảnh chụp chứa trạng thái dự định.

Tài liệu tham khảo