Hướng dẫn dùng soup drawing python
Vietnamese (Tiếng Việt) translation by Dai Phong (you can also view the original English article) Show Trong một bài viết trước, tôi đã hướng dẫn cho bạn cách sử dụng mô-đun Requests để 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 tin PDF bằng lập trình. Một điều còn thiếu trong hướng dẫn đó là về kỹ thuật scraping (trích xuất nội dung) trang web mà bạn đã truy cập bằng Requests để trích xuất thông tin mà bạn cần. Trong hướng dẫn này, bạn sẽ được tìm hiểu về Beautiful Soup, một thư viện Python để trích xuất dữ liệu từ các tập tin HTML. Trọng tâm của hướng dẫn này là học 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 đặtBạn có thể cài đặt Beautiful Soup 4 bằng
$ 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ề tarball nguồn của Beautiful Soup 4 và cài đặt nó bằng $ python setup.py install BeautifulSoup ban đầu được đóng gói như là code 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 sang code của Python 3. Code sẽ không được chuyển đổi trừ khi bạn cài đặt gói. Dưới đây là một số lỗi phổ biến mà bạn có thể bắt gặp:
Cả hai lỗi trên có thể được khắc phục bằng cách gỡ cài đặt và cài đặt lại Beautiful Soup. Cài đặt ParserTrước khi thảo luận về sự khác biệt giữa các parser khác nhau mà bạn có thể sử dụng cùng với Beautiful Soup, hãy viết code để tạo ra một soup. from bs4 import BeautifulSoup soup = BeautifulSoup(" Đối tượng
$ pip install lxml $ pip install html5lib Parser soup = BeautifulSoup(" Những sự khác biệt được chỉ 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 được những khác biệt này sẽ giúp bạn gỡ lỗi một số lỗi phân tích và quyết định parser nào bạn muốn sử dụng trong một dự án. Nói chung, parser Các Đối tượng trong Beautiful SoupBeautiful Soup phân tích tài liệu HTML đã cho thành một cây các đối tượng Python. Có bốn đối tượng Python chính mà bạn cần biết: Đối tượng 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 Văn bản bên trong một thẻ được lưu trữ như là một Beautiful Soup cũng cho phép bạn truy cập các comment trong một trang web. Các comment này được lưu trữ dưới dạng một đối tượng Bạn đã học về đối tượng
Lấy Tiêu đề, Heading và Liên kếtBạ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. Hãy trích xuất trang Wikipedia về Python. Trước tiên, bạn sẽ phải lấy cho được markup của trang web bằng cách sử dụng code sau đây dựa trên hướng dẫn về mô-đun Requests để truy xuất các trang web. import requests from bs4 import BeautifulSoup req = requests.get('https://en.wikipedia.org/wiki/Python_(programming_language)') soup = BeautifulSoup(req.text, "lxml") Bây giờ bạn đã tạo ra soup, bạn có thể lấy tiêu đề của trang web bằng cách sử dụng code sau: soup.title # Bạn cũng có thể trích xuất các thông tin khác của trang web như heading hoặc đoạn văn đầu tiên, các lớp của chúng, hoặc thuộc tính soup.h2 # Tương tự, bạn có thể lặp qua tất cả các liên kết hoặc heading con trong một tài liệu bằng code sau: for sub_heading in soup.find_all('h2'): print(sub_heading.text) # all the sub-headings like Contents, History[edit]... Điều hướng trên DOMBạn có thể điều hướng trên cây DOM bằng các tên thẻ thông thường. Việc móc nối các tên thẻ có thể giúp bạn điều hướng cây được sâu hơn. Ví dụ, bạn có thể lấy được liên kết đầu tiên trong đoạn đầu của trang Wikipedia cho trước bằng Bạn cũng có thể truy xuất tất
cả các con của một thẻ thành một danh sách sử dụng Cả print(soup.p.contents) # [Python, ' is a widely used ',.....the full list] print(soup.p.contents[10]) # readability for child in soup.p.children: print(child.name) # b # None # a # None # a # None # ... and so on. 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 print(soup.p.parent.name) # div for parent in soup.p.parents: print(parent.name) # div # div # div # body # html # [document] Bạn có thể truy cập phần tử anh chị em trước và sau của một phần tử bằng các thuộc tính Đối với hai phần tử để được là anh chị em, chúng cần phải có cùng một phần tử cha. Điều này có nghĩa là con đầ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 thật sự, các anh chị em trước và tiếp theo của một phần tử có lẽ sẽ là một ký tự xuống dòng. Bạn cũng có thể lặp qua tất cả các anh chị em của một phần tử bằng soup.head.next_sibling # '\n' soup.p.a.next_sibling # ' for ' soup.p.a.previous_sibling # ' is a widely used ' print(soup.p.b.previous_sibling) # None 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 Tương tự, bạn có thể lặp qua 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 Tóm tắtSau 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 parser 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 đề mục 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. |