Trình phân tích cú pháp css của beautifulsoup
Trong phần này, chúng tôi sẽ phân tích cú pháp thành dữ liệu XML nội dung để xử lý. Để xử lý XML, ta sẽ sử dụng thư viện Beautifulsoup 4. Đây là một thư viện giúp phát triển công việc phân tích cú pháp html, xml nhanh chóng và tiện lợi Show
Tuyển dụng lập trình python lương cao 8. 1. Cài đặt BeautifulsoupBạn có thể tham khảo hướng dẫn cách cài đặt tại trang web http. //www. vụn vặt. com/software/BeautifulSoup/bs4/doc/#installing-bean-soup c . Trên MacOS, có thể cài đặt bằng sudo pip install lxml6 như sau. $ sudo pip install beautifulsoup4 8. 2. Cài đặt trình phân tích cú pháp sudo pip install lxml7Để phân tích cú pháp sudo pip install lxml8 từ beautifulsoup, tao sử dụng bộ phân tích cú pháp xml có tên là sudo pip install lxml7. Xem hướng dẫn cài đặt tại https. //www. vụn vặt. com/software/BeautifulSoup/bs4/doc/#installing-a-parser Trên MacOS, có thể cài đặt bằng sudo pip install lxml6 như sau sudo pip install lxml 8. 3. Ví dụ về phân tích cú pháp XMLCho ví dụ sau from bs4 import BeautifulSoup as Soup note = ''' Khi chạy thì sẽ hiển thị màn hình như sau Belgian Waffles : $5.95 Strawberry Belgian Waffles : $7.95 Đối tượng thuộc sudo pip install lxml0 Soup (BeautifulSoup) sẽ giúp truy xuất các thành phần của tệp xml nhanh chóng và thuận tiện. Trong ví dụ có một số cách truy xuất đến các phần tử như
8. 4. Phân tích cú pháp HTMLTương tự như sudo pip install lxml8 , BeautifulSoup có thể phân tích nội dung HTML thông qua khởi tạo hàm và chọn sudo pip install lxml5 ở tham số thứ 2 Trong bài viết này, chúng ta sẽ xem cách trích xuất thông tin có cấu trúc từ các trang web bằng cách sử dụng bộ chọn BeautifulSoup và CSS Lấy HTMLBeautifulSoup không phải là một thư viện quét web. Nó là một thư viện cho phép bạn lấy thông tin từ HTML một cách hiệu quả và dễ dàng. Trong thế giới thực, nó thường được sử dụng cho các dự án quét web Vì vậy, để bắt đầu, chúng ta cần một tài liệu HTML. Với mục đích đó, chúng tôi sẽ sử dụng gói Yêu cầu của Python và tìm nạp trang chính của HackerNews
Phân tích cú pháp HTML bằng BeautifulSoupBây giờ HTML có thể truy cập được, chúng tôi sẽ sử dụng BeautifulSoup để phân tích nó. Nếu bạn chưa cài đặt, bạn có thể cài đặt gói bằng cách thực hiện sudo pip install lxml09 đơn giản. Trong phần còn lại của bài viết này, chúng tôi sẽ gọi BeautifulSoup4 là "BS4" Bây giờ chúng ta cần phân tích cú pháp HTML và tải nó vào cấu trúc BS4 sudo pip install lxml0 Đối tượng sudo pip install lxml20 này rất tiện dụng và cho phép chúng ta dễ dàng truy cập nhiều thông tin hữu ích như sudo pip install lxml2 Nhắm mục tiêu các phần tử DOMBạn có thể bắt đầu thấy một khuôn mẫu trong cách sử dụng thư viện này. Nó cho phép bạn nhắm mục tiêu nhanh chóng và thanh lịch các phần tử DOM mà bạn cần Nếu bạn cần chọn các phần tử DOM từ thẻ của nó ( sudo pip install lxml21, sudo pip install lxml22, sudo pip install lxml23,. ) bạn có thể chỉ cần làm sudo pip install lxml24 để chọn nó. Thông báo trước là nó sẽ chỉ chọn phần tử HTML đầu tiên có thẻ đó Ví dụ: nếu tôi muốn liên kết đầu tiên, tôi chỉ cần truy cập vào trường sudo pip install lxml25 của đối tượng BeautifulSoup của mình sudo pip install lxml9 Phần tử đó là một đại diện đầy đủ của thẻ đó và đi kèm với khá nhiều phương thức dành riêng cho HTML from bs4 import BeautifulSoup as Soup note = '''0 Đây là một ví dụ đơn giản. Nếu bạn muốn chọn phần tử đầu tiên dựa trên thuộc tính sudo pip install lxml26 hoặc sudo pip install lxml27 của nó thì không khó hơn nhiều from bs4 import BeautifulSoup as Soup note = '''3 Và nếu bạn không muốn phần tử phù hợp đầu tiên mà thay vào đó là tất cả các phần tử phù hợp, chỉ cần thay thế sudo pip install lxml28 bằng sudo pip install lxml29 Giao diện đơn giản và thanh lịch này cho phép bạn nhanh chóng viết các đoạn mã Python ngắn và mạnh mẽ. Ví dụ: giả sử tôi muốn trích xuất tất cả các liên kết trong trang này và tìm ba liên kết hàng đầu xuất hiện nhiều nhất trên trang. Tất cả những gì tôi phải làm là thế này from bs4 import BeautifulSoup as Soup note = '''6 Lựa chọn phần tử độngCho đến nay, chúng tôi luôn chuyển một loại thẻ tĩnh, tuy nhiên, sudo pip install lxml29 linh hoạt hơn và cũng hỗ trợ các lựa chọn động. Ví dụ: chúng ta có thể chuyển một tham chiếu hàm và sudo pip install lxml29 sẽ gọi hàm của bạn cho từng phần tử và chỉ bao gồm phần tử đó nếu hàm của bạn trả về sudo pip install lxml92 Trong mẫu mã sau đây, chúng tôi đã xác định hàm sudo pip install lxml93 nhận tham số thẻ và chỉ trả về sudo pip install lxml92 nếu nó có thẻ sudo pip install lxml22 với lớp HTML sudo pip install lxml96. Về cơ bản, chúng tôi chỉ trích xuất các liên kết bài viết từ trang chính Belgian Waffles : $5.95 Strawberry Belgian Waffles : $7.954 sudo pip install lxml29 không chỉ hỗ trợ các chuỗi tĩnh dưới dạng bộ lọc, mà còn tuân theo cách tiếp cận "true-ness" chung, trong đó bạn có thể chuyển các loại biểu thức khác nhau và chúng chỉ cần đánh giá là true. Ngoài các chuỗi thẻ và chức năng, hiện tại cũng có hỗ trợ cho các biểu thức và danh sách thông thường. Ngoài sudo pip install lxml29, còn có các chức năng khác để điều hướng cây DOM, ví dụ: chọn các anh chị em DOM sau hoặc cha mẹ của phần tử BeautifulSoup là một ví dụ tuyệt vời về một thư viện dễ sử dụng và mạnh mẽ. Chúng ta chủ yếu nói về việc chọn và tìm các phần tử, nhưng bạn cũng có thể thay đổi và cập nhật toàn bộ cây DOM. Tuy nhiên, chúng tôi sẽ không đề cập đến các bit này trong bài viết này vì đã đến lúc sử dụng bộ chọn CSS bộ chọn CSS
Chà, bạn sẽ sớm hiểu thôi Truy vấn DOMThông thường, các phần tử DOM không có ID hoặc tên lớp thích hợp. Mặc dù hoàn toàn có thể (vui lòng xem các ví dụ trước của chúng tôi), việc chọn các phần tử trong trường hợp đó có thể khá dài dòng và yêu cầu nhiều bước thủ công Ví dụ: giả sử bạn muốn trích xuất điểm của một bài đăng trên trang chủ HN, nhưng bạn không thể sử dụng tên sudo pip install lxml27 hoặc sudo pip install lxml26 trong mã của mình. Đây là cách bạn có thể làm điều đó Belgian Waffles : $5.95 Strawberry Belgian Waffles : $7.959 Như đã hứa, khá dài dòng, phải không? Đây chính xác là nơi bộ chọn CSS tỏa sáng. Chúng cho phép bạn chia nhỏ vòng lặp của mình và if thành một biểu thức sudo pip install lxml0 Chìa khóa ở đây là from bs4 import BeautifulSoup as Soup note = '''01. Điều này chọn cho chúng tôi sudo pip install lxml23 đầu tiên là con trực tiếp của ________ 203, bản thân nó phải là phần tử thứ hai của cha mẹ nó (________ 204). HTML sau đây minh họa một đoạn trích DOM hợp lệ cho bộ chọn của chúng tôi sudo pip install lxml00 Điều này rõ ràng và đơn giản hơn nhiều, phải không? . Nhưng sau khi chơi một lúc với DOM, bạn sẽ nhanh chóng nhận ra bộ chọn CSS mạnh mẽ như thế nào, đặc biệt là khi bạn không thể chỉ dựa vào ID hoặc tên lớp Dễ dàng sửa lỗiMột điều nữa làm cho bộ chọn CSS trở nên tuyệt vời để quét web là chúng có thể dễ dàng sửa lỗi. Hãy cùng kiểm tra nào Mở công cụ dành cho nhà phát triển ( from bs4 import BeautifulSoup as Soup note = '''05) trong Chrome hoặc Firefox, chọn tab tài liệu và sử dụng from bs4 import BeautifulSoup as Soup note = '''06/ from bs4 import BeautifulSoup as Soup note = '''07 + from bs4 import BeautifulSoup as Soup note = '''08 để mở thanh tìm kiếm. Bây giờ hãy nhập bất kỳ biểu thức CSS nào (e. g. from bs4 import BeautifulSoup as Soup note = '''09) và trình duyệt sẽ tìm phần tử phù hợp đầu tiên. Nhấn from bs4 import BeautifulSoup as Soup note = '''30 sẽ lặp lại các phần tử
Điều tuyệt vời là nó cũng hoạt động theo cách khác. Nhấp chuột phải vào bất kỳ phần tử nào trong trình kiểm tra DOM và chọn from bs4 import BeautifulSoup as Soup note = '''31 - from bs4 import BeautifulSoup as Soup note = '''32 từ menu ngữ cảnh Voilà, bạn có bộ chọn phù hợp trong khay nhớ tạm của mình
biểu thức nâng caoBộ chọn CSS cung cấp một cú pháp toàn diện để chọn các thành phần trong nhiều cài đặt khác nhau Điều này bao gồm các tổ hợp con và hậu duệ, bộ chọn thuộc tính, v.v. Con và con cháuBộ chọn con và hậu duệ cho phép bạn chọn các phần tử là phần tử con trực tiếp hoặc gián tiếp của phần tử cha đã cho sudo pip install lxml01 Và bạn có thể trộn chúng lại với nhau sudo pip install lxml02 Bộ chọn đó sẽ hoạt động hoàn toàn tốt với đoạn mã HTML này sudo pip install lxml03 Anh chị em ruộtĐây là một trong những mục yêu thích của tôi vì nó cho phép bạn chọn các phần tử dựa trên các phần tử ở cùng cấp độ trong hệ thống phân cấp DOM, do đó có biểu thức anh chị em sudo pip install lxml04 Để chọn tất cả from bs4 import BeautifulSoup as Soup note = '''33 sau một from bs4 import BeautifulSoup as Soup note = '''34, bạn có thể sử dụng bộ chọn from bs4 import BeautifulSoup as Soup note = '''35 (nó sẽ khớp với hai sudo pip install lxml21) Bạn cũng có thể sử dụng from bs4 import BeautifulSoup as Soup note = '''37 nếu bạn chỉ muốn chọn sudo pip install lxml21 ngay sau from bs4 import BeautifulSoup as Soup note = '''39 của chúng tôi (nó sẽ chỉ khớp với một sudo pip install lxml21) bộ chọn thuộc tínhBộ chọn thuộc tính cho phép bạn chọn các phần tử có giá trị thuộc tính cụ thể. Vì vậy, from bs4 import BeautifulSoup as Soup note = '''61 sẽ khớp sudo pip install lxml05 lớp giảGiả sử chúng ta có tài liệu HTML này sudo pip install lxml06 Hơn nữa, giả sử chúng ta chỉ muốn chọn một phần tử sudo pip install lxml21 cụ thể. Chào mừng đến với lớp học giả Các lớp giả, chẳng hạn như from bs4 import BeautifulSoup as Soup note = '''63, from bs4 import BeautifulSoup as Soup note = '''64 và from bs4 import BeautifulSoup as Soup note = '''65, cho phép bạn chọn các phần tử cụ thể theo vị trí của chúng trong cây DOM sudo pip install lxml07 Có rất nhiều lớp giả khác (e. g. from bs4 import BeautifulSoup as Soup note = '''66 sẽ chọn tất cả các hộp kiểm đã chọn) và bạn có thể tìm thấy danh sách đầy đủ tại đây. Nếu bạn muốn tìm hiểu thêm về bộ chọn CSS, bạn cũng có thể thấy bài viết này thú vị Mã có thể bảo trìTôi cũng nghĩ rằng các biểu thức CSS dễ bảo trì hơn. Ví dụ: tại ScrapingBee, khi chúng tôi thực hiện các tác vụ quét web tùy chỉnh, tất cả các tập lệnh của chúng tôi bắt đầu như thế này sudo pip install lxml08 Điều này giúp dễ dàng sửa các tập lệnh khi thay đổi DOM được thực hiện Chắc chắn, một cách khá dễ dàng để xác định bộ chọn CSS phù hợp là chỉ cần sao chép/dán những gì Chrome cung cấp cho bạn khi bạn nhấp chuột phải vào một phần tử. Tuy nhiên, bạn nên cẩn thận, vì các đường dẫn bộ chọn này có xu hướng rất "tuyệt đối" về bản chất và thường không hiệu quả nhất cũng như không linh hoạt đối với các thay đổi của DOM. Nói chung, tốt nhất bạn nên xác minh các bộ chọn đó theo cách thủ công trước khi sử dụng chúng trong tập lệnh của mình
Sự kết luậnBộ chọn BeautifulSoup và CSS cung cấp một cách tiếp cận rất thanh lịch và nhẹ nhàng để chạy các công việc quét web của bạn từ tập lệnh Python. Cụ thể, bộ chọn CSS là một công nghệ cũng được sử dụng ngoài lĩnh vực Python và là thứ chắc chắn đáng để thêm vào danh sách công cụ của một người Tôi hy vọng bạn thích bài viết này về quét web bằng Python và nó sẽ giúp cuộc sống của bạn dễ dàng hơn. Nếu bạn muốn đọc thêm về quét web bằng Python, đừng ngần ngại xem hướng dẫn quét web Python mở rộng của chúng tôi. Bạn cũng có thể quan tâm đến hướng dẫn XPath của chúng tôi Chúc mừng cạo, Pierre de Wulf Pierre de WulfPierre là một kỹ sư dữ liệu từng làm việc trong một số công ty khởi nghiệp có tốc độ tăng trưởng cao trước khi đồng sáng lập ScrapingBee. Anh ấy là một chuyên gia xử lý dữ liệu và quét web. |