7 Câu hỏi: Phân tích cú pháp HTML bằng python - lxml hoặc BeautifulSoup? Cái nào trong số này tốt hơn cho những mục đích nào?

câu hỏi được tạo ra tại Thu, Dec 17, 2009 12:00 AM

Từ những gì tôi có thể tìm ra, hai thư viện phân tích cú pháp HTML chính trong Python là lxml và BeautifulSoup. Tôi đã chọn BeautifulSoup cho một dự án tôi đang thực hiện, nhưng tôi đã chọn nó không vì lý do đặc biệt nào ngoài việc tìm cú pháp dễ tìm hiểu và hiểu hơn một chút. Nhưng tôi thấy rất nhiều người dường như ủng hộ lxml và tôi đã nghe nói rằng lxml nhanh hơn.

Vì vậy, tôi tự hỏi những lợi thế của cái này hơn cái kia là gì? Khi nào tôi muốn sử dụng lxml và khi nào tôi nên sử dụng BeautifulSoup? Có thư viện nào khác đáng để xem xét không?

    
54
  1. câu trả lời chi tiết ; đăng lại ở đây vì câu hỏi trùng lặp.
    2013-10-23 18: 23: 19Z
  2. Xin lỗi, tôi muốn đóng cái khác. Bây giờ đánh dấu cái khác. Tôi nghĩ việc treo cờ ở đâu không quan trọng, ở cái cũ hơn hay ở cái mới hơn.
    2013-10-24 00: 51: 20Z
7 Câu trả lời                              7                         

như lxml.

Trích dẫn từ trang được liên kết:

  

Phiên bản 3.1.0 của Soup đẹp   tồi tệ hơn đáng kể trên HTML thế giới thực   so với phiên bản 3.0.8. Nhất   vấn đề thường gặp là xử lý   thẻ không chính xác, "bắt đầu không đúng   lỗi "thẻ và lỗi" thẻ kết thúc xấu ".   Trang này giải thích những gì đã xảy ra, làm thế nào   vấn đề sẽ được giải quyết, và   những gì bạn có thể làm ngay bây giờ.

     

Trang này ban đầu được viết bằng   Tháng 3 năm 2009. Kể từ đó, loạt 3.2   đã được phát hành, thay thế cho 3.1   loạt, và sự phát triển của 4.x   loạt đã được tiến hành. Trang này   sẽ vẫn còn cho lịch sử   mục đích.

     

tl; dr

     

Sử dụng 3.2.0 thay thế.

    
22
2011-04-25 02: 37: 37Z
  1. + 1 Không biết về sự phân rã của BeautifulSoup, thứ mà tôi dựa vào và ngưỡng mộ.
    2009-12-17 14: 14: 27Z
  2. Chà, lxml nói rằng nó có hiệu suất tốt, trong khi ai đó ở đây nói BeautifulSoup có hiệu suất rất chậm. Nó dường như cũng có API phong nha. scriptspeak.net/lxml/performance.html
    2010-01 /02 03: 09: 33Z
  3. IMHO đây là sai lệch - đọc cẩn thận trang đó cho thấy 49 310 chỉ là một thay thế cho phiên bản có vấn đề 3.1.0, các vấn đề đã được khắc phục trong 3.2.0 và bây giờ thậm chí còn có phiên bản 4 trên đường được phát hành chỉ 2 tháng trước - vì vậy mô-đun hầu như không "được duy trì tích cực". Vui lòng sửa đổi câu trả lời
    2011-04-23 15: 58: 36Z
  4. Thật tuyệt khi thấy BeautifulSoup được duy trì lại. 3.2.0 đã được phát hành vào tháng 11 năm 2010 --- gần một năm sau câu trả lời này .. :)
    2011-04-26 09: 47: 24Z
  5. Khi tôi đọc điều này, tôi nghĩ rằng bs4 đã chết. Đã cảm thấy nhẹ nhõm khi tìm "Sử dụng 3.2.0 thay thế."
    2016-03-19 02: 50: 18Z

49 310 cung cấp giao diện bộ chọn jQuery cho Python (sử dụng lxml dưới mui xe).

http://pypi.python.org/pypi/pyquery

Thật tuyệt vời, tôi không sử dụng bất cứ thứ gì khác nữa.

    
26
2016/03/03 18: 40: 51Z
  1. Tôi luôn muốn dùng thử lib này. Trông thật thú vị.
    2012-12-10 23: 15: 59Z
  2. Điều này hoạt động tốt hơn bs4. Tôi đã gặp một số vấn đề với bs4 khi 49 310 thậm chí không hoạt động: (
    2015-04-20 11: 52: 05Z

Tóm lại, 49 310 được định vị là trình phân tích cú pháp html và xml chất lượng sản xuất nhanh như chớp, nhân tiện, cũng bao gồm một mô-đun 49 310 để quay trở lại chức năng của BeautifulSoup. 49 310 là một dự án một người, được thiết kế để giúp bạn tiết kiệm thời gian để nhanh chóng trích xuất dữ liệu ra khỏi html hoặc xml được định dạng kém.

tài liệu lxml nói rằng cả hai trình phân tích cú pháp đều có ưu điểm và nhược điểm. Vì lý do này, 49 310 cung cấp 49 310 để bạn có thể chuyển đổi qua lại. Trích dẫn,

  

BeautifulSoup sử dụng một cách tiếp cận phân tích cú pháp khác. Nó không phải là một HTML thực sự   trình phân tích cú pháp nhưng sử dụng các biểu thức thông thường để lặn qua súp thẻ. Nó là   do đó, tha thứ nhiều hơn trong một số trường hợp và ít tốt hơn trong những trường hợp khác. Nó là   không có gì lạ khi lxml /libxml2 phân tích cú pháp và sửa lỗi HTML bị hỏng tốt hơn,   nhưng BeautifulSoup có hỗ trợ siêu tốc để phát hiện mã hóa. Nó   phụ thuộc rất nhiều vào đầu vào mà trình phân tích cú pháp hoạt động tốt hơn.

Cuối cùng họ đang nói,

  

Nhược điểm của việc sử dụng trình phân tích cú pháp này là chậm hơn nhiều so với   trình phân tích cú pháp HTML của lxml. Vì vậy, nếu hiệu suất quan trọng, bạn có thể muốn   chỉ xem xét sử dụng soupparser như một dự phòng cho một số trường hợp nhất định.

. một cây như bạn mong đợi Tôi giả sử nó cũng áp dụng cho chính 49 310, không chỉ cho 49 310 cho 49 310.

Họ cũng chỉ ra cách hưởng lợi từ phát hiện mã hóa của 49 310, trong khi vẫn phân tích cú pháp nhanh chóng với 49 310:

 49 310

(Cùng một nguồn: http://lxml.de/elementsoup.html ).

Theo lời của người tạo ra 49 310,

  

Thế thôi! Chúc vui vẻ! Tôi đã viết Beautiful Soup để tiết kiệm thời gian của mọi người.   Khi bạn đã quen với nó, bạn sẽ có thể loại bỏ dữ liệu ra khỏi   các trang web được thiết kế kém chỉ trong vài phút. Gửi email cho tôi nếu bạn   có bất kỳ ý kiến, gặp vấn đề, hoặc muốn tôi biết về bạn   dự án sử dụng Beautiful Soup.

 49 310

Được trích dẫn từ tài liệu /p>

Tôi hy vọng điều này đã rõ ràng. Súp là một dự án một người xuất sắc được thiết kế để giúp bạn tiết kiệm thời gian để trích xuất dữ liệu từ các trang web được thiết kế kém. Mục tiêu là giúp bạn tiết kiệm thời gian ngay bây giờ, hoàn thành công việc, không nhất thiết phải tiết kiệm thời gian cho bạn trong thời gian dài và chắc chắn không tối ưu hóa hiệu suất của phần mềm của bạn.

Ngoài ra, từ trang web lxml ,

  

lxml đã được tải xuống từ Chỉ mục gói Python hơn hai   triệu lần và cũng có sẵn trực tiếp trong nhiều gói   phân phối, ví dụ: cho Linux hoặc MacOS-X.

Và, từ Tại sao lxml? ,

  

Thư viện C libxml2 và libxslt có lợi ích rất lớn: ...   Tuân thủ tiêu chuẩn ... Đầy đủ tính năng ... nhanh chóng. Nhanh! NHANH! ... lxml   là một ràng buộc Python mới cho libxml2 và libxslt ...

    

14
2013-10-23 18: 25: 30Z

Đừng sử dụng BeautifulSoup, hãy sử dụng lxml.soupparser sau đó bạn đang ngồi trên đỉnh của sức mạnh của lxml và có thể sử dụng các bit tốt của BeautifulSoup đó là để đối phó với HTML thực sự bị hỏng và nhảm nhí.

    
11
2013-05-29 12: 37: 25Z

Tôi đã sử dụng lxml rất thành công để phân tích cú pháp HTML. Nó dường như cũng làm tốt công việc xử lý HTML "soupy". Tôi rất muốn giới thiệu nó.

Đây là một thử nghiệm nhanh mà tôi đã nói dối để thử xử lý một số HTML xấu xí:

 49 310     
5
2009-12-17 14: 19: 18Z

Để chắc chắn tôi sẽ sử dụng EHP. Nó nhanh hơn lxml, sử dụng thanh lịch và đơn giản hơn nhiều.

Kiểm tra. https://github.com/iogf/ehp

 49 310

Đầu ra:

 49 310     
1
2016-03-20 10: 03: 18Z
lxml
nguồn đặt đây