Chào mừng bạn đến với hướng dẫn quét web với Beautiful Soup 4. Beautiful Soup là một thư viện Python nhằm giúp các lập trình viên đang cố gắng thu thập dữ liệu từ các trang web
Để sử dụng canh đẹp, bạn cần cài đặt.
soup = bs.BeautifulSoup[source,'lxml']1. Beautiful Soup cũng dựa vào trình phân tích cú pháp, mặc định là
soup = bs.BeautifulSoup[source,'lxml']2. Bạn có thể đã có nó, nhưng bạn nên kiểm tra [mở IDLE và cố gắng nhập lxml]. Nếu không, làm.
soup = bs.BeautifulSoup[source,'lxml']3 hoặc
soup = bs.BeautifulSoup[source,'lxml']0
Để bắt đầu, chúng ta cần HTML. Tôi đã tạo một trang ví dụ để chúng ta làm việc với
Để bắt đầu, chúng ta cần nhập Beautiful Soup và urllib, đồng thời lấy mã nguồn
import bs4 as bs import urllib.request source = urllib.request.urlopen['//pythonprogramming.net/parsememcparseface/'].read[]
Sau đó, chúng tôi tạo ra "súp. "Đây là một món súp tuyệt đẹp
soup = bs.BeautifulSoup[source,'lxml']
Nếu bạn làm
soup = bs.BeautifulSoup[source,'lxml']1 và
soup = bs.BeautifulSoup[source,'lxml']2, nó trông giống nhau, nhưng nguồn chỉ đơn giản là dữ liệu phản hồi và súp là một đối tượng mà chúng ta thực sự có thể tương tác với, theo thẻ, bây giờ, như vậy
# title of the page print[soup.title] # get attributes: print[soup.title.name] # get values: print[soup.title.string] # beginning navigation: print[soup.title.parent.name] # getting specific values: print[soup.p]
Tìm các thẻ đoạn văn
soup = bs.BeautifulSoup[source,'lxml']3 là một nhiệm vụ khá phổ biến. Trong trường hợp trên, chúng tôi chỉ tìm cái đầu tiên. Điều gì sẽ xảy ra nếu chúng ta muốn tìm tất cả chúng?
print[soup.find_all['p']]
Chúng ta cũng có thể lặp qua chúng
________số 8Sự khác biệt giữa chuỗi và văn bản là chuỗi tạo ra đối tượng NavigableString và văn bản chỉ là văn bản unicode điển hình. Lưu ý rằng, nếu có các thẻ con trong mục đoạn văn mà chúng tôi đang cố gắng sử dụng
soup = bs.BeautifulSoup[source,'lxml']4 trên đó, chúng tôi sẽ trả về
soup = bs.BeautifulSoup[source,'lxml']5
Một nhiệm vụ phổ biến khác là lấy liên kết. Ví dụ
import bs4 as bs import urllib.request source = urllib.request.urlopen['//pythonprogramming.net/parsememcparseface/'].read[]1
Trong trường hợp này, nếu chúng tôi chỉ lấy
soup = bs.BeautifulSoup[source,'lxml']6 từ thẻ, bạn sẽ nhận được văn bản liên kết, nhưng chúng tôi thực sự muốn chính liên kết đó. Đó là lý do tại sao chúng tôi đang sử dụng
soup = bs.BeautifulSoup[source,'lxml']7 để lấy URL thực
Cuối cùng, bạn có thể chỉ muốn lấy văn bản. Bạn có thể sử dụng
soup = bs.BeautifulSoup[source,'lxml']8 trên đối tượng Món súp đẹp mắt, bao gồm cả món súp đầy đủ
import bs4 as bs import urllib.request source = urllib.request.urlopen['//pythonprogramming.net/parsememcparseface/'].read[]5
Điều này kết thúc phần giới thiệu về Beautiful Soup. Trong hướng dẫn tiếp theo, chúng ta sẽ đề cập đến việc điều hướng các thành phần của trang để có được những gì bạn muốn một cách cụ thể hơn
Hôm nay chúng ta sẽ thảo luận về cách sử dụng thư viện Beautiful Soup để trích xuất nội dung từ trang HTML. Sau khi trích xuất, chúng tôi sẽ chuyển đổi nó thành danh sách Python hoặc từ điển bằng Beautiful Soup
Thêm tài nguyên Python
- IDE là gì?
- bảng ăn gian. Trăn 3. 7 cho người mới bắt đầu
- Khung GUI Python hàng đầu
- Tải xuống. 7 thư viện PyPI thiết yếu
- Nhà phát triển mũ đỏ
- Nội dung Python mới nhất
Quét web là gì và tại sao tôi cần nó?
Câu trả lời đơn giản là đây. Không phải mọi trang web đều có API để tìm nạp nội dung. Bạn có thể muốn nhận công thức nấu ăn từ trang web nấu ăn yêu thích của mình hoặc ảnh từ blog du lịch. Nếu không có API, trích xuất HTML hoặc thu thập dữ liệu, có thể là cách duy nhất để lấy nội dung đó. Tôi sẽ chỉ cho bạn cách làm điều này trong Python
Không phải tất cả các trang web đều vui lòng cạo và một số có thể cấm nó một cách rõ ràng. Kiểm tra với chủ sở hữu trang web nếu họ đồng ý với việc cạo
Làm cách nào để cạo một trang web bằng Python?
Để quét web hoạt động trong Python, chúng tôi sẽ thực hiện ba bước cơ bản
- Trích xuất nội dung HTML bằng thư viện
soup = bs.BeautifulSoup[source,'lxml']
4 - Phân tích cấu trúc HTML và xác định các thẻ có nội dung của chúng tôi
- Trích xuất các thẻ bằng Beautiful Soup và đưa dữ liệu vào danh sách Python
Cài đặt các thư viện
Trước tiên hãy cài đặt các thư viện chúng ta cần. Thư viện
soup = bs.BeautifulSoup[source,'lxml']4 lấy nội dung HTML từ một trang web. Beautiful Soup phân tích cú pháp HTML và chuyển đổi nó thành các đối tượng Python. Để cài đặt những thứ này cho Python 3, hãy chạy
import bs4 as bs import urllib.request source = urllib.request.urlopen['//pythonprogramming.net/parsememcparseface/'].read[]6
Trích xuất HTML
Đối với ví dụ này, tôi sẽ chọn cạo phần Công nghệ của trang web này. Nếu bạn vào trang đó, bạn sẽ thấy một danh sách các bài viết có tiêu đề, đoạn trích và ngày xuất bản. Mục tiêu của chúng tôi là tạo một danh sách các bài báo có thông tin đó
URL đầy đủ của trang Công nghệ là
import bs4 as bs import urllib.request source = urllib.request.urlopen['//pythonprogramming.net/parsememcparseface/'].read[]7
Chúng tôi có thể lấy nội dung HTML từ trang này bằng cách sử dụng
soup = bs.BeautifulSoup[source,'lxml']4
import bs4 as bs import urllib.request source = urllib.request.urlopen['//pythonprogramming.net/parsememcparseface/'].read[]8
Biến
import bs4 as bs import urllib.request source = urllib.request.urlopen['//pythonprogramming.net/parsememcparseface/'].read[]70 sẽ chứa mã nguồn HTML của trang
Trích xuất nội dung từ HTML
Để trích xuất dữ liệu của chúng tôi từ HTML nhận được trong
import bs4 as bs import urllib.request source = urllib.request.urlopen['//pythonprogramming.net/parsememcparseface/'].read[]70, chúng tôi sẽ cần xác định thẻ nào có những gì chúng tôi cần
Nếu bạn lướt qua HTML, bạn sẽ thấy phần này ở gần trên cùng
soup = bs.BeautifulSoup[source,'lxml']1
Đây là phần lặp lại trên toàn trang cho mọi bài viết. Chúng ta có thể thấy rằng
import bs4 as bs import urllib.request source = urllib.request.urlopen['//pythonprogramming.net/parsememcparseface/'].read[]72 có tiêu đề bài báo,
import bs4 as bs import urllib.request source = urllib.request.urlopen['//pythonprogramming.net/parsememcparseface/'].read[]73 có đoạn trích và
import bs4 as bs import urllib.request source = urllib.request.urlopen['//pythonprogramming.net/parsememcparseface/'].read[]74 có ngày xuất bản
Hãy trích xuất chúng bằng cách sử dụng Beautiful Soup
soup = bs.BeautifulSoup[source,'lxml']5
Đoạn mã trên trích xuất các mạo từ và đặt chúng vào biến
import bs4 as bs import urllib.request source = urllib.request.urlopen['//pythonprogramming.net/parsememcparseface/'].read[]75. Tôi đang sử dụng
import bs4 as bs import urllib.request source = urllib.request.urlopen['//pythonprogramming.net/parsememcparseface/'].read[]76 để in đầu ra đẹp mắt, nhưng bạn có thể bỏ qua nó trong mã của mình. Lưu mã ở trên vào một tệp có tên là
import bs4 as bs import urllib.request source = urllib.request.urlopen['//pythonprogramming.net/parsememcparseface/'].read[]77, sau đó chạy mã đó bằng cách sử dụng
soup = bs.BeautifulSoup[source,'lxml']9
Nếu mọi thứ suôn sẻ, bạn sẽ thấy cái này
soup = bs.BeautifulSoup[source,'lxml']0
Và đó là tất cả những gì nó cần. Trong 22 dòng mã, chúng tôi đã tạo một trình quét web bằng Python. Bạn có thể tìm mã nguồn trong repo mẫu của tôi
Phần kết luận
Với nội dung trang web trong danh sách Python, giờ đây chúng ta có thể làm những thứ thú vị với nó. Chúng tôi có thể trả lại nó dưới dạng JSON cho một ứng dụng khác hoặc chuyển đổi nó thành HTML với kiểu dáng tùy chỉnh. Vui lòng sao chép-dán đoạn mã trên và thử nghiệm với trang web yêu thích của bạn
Hãy vui vẻ và tiếp tục viết mã
Bài viết này ban đầu được xuất bản trên blog cá nhân của tác giả và đã được điều chỉnh với sự cho phép
Đọc gì tiếp theo
3 Trình quét và trình thu thập dữ liệu web Python
Hãy xem các công cụ Python tuyệt vời này để thu thập dữ liệu và tìm kiếm trang web cũng như phân tích dữ liệu bạn cần
Jason B
[Cựu Sinh Viên Mũ Đỏ]28 Tháng Chín, 2017Hướng dẫn dành cho người mới bắt đầu quét web bằng Python
Nhận một số trải nghiệm thực tế với các công cụ Python cần thiết để quét các trang web HTML hoàn chỉnh
Julia Piaskowski
22 Tháng Năm, 2020thẻ
phát triển web
con trăn
Ayush Sharma
Tôi là một nhà văn và Kiến trúc sư giải pháp AWS. Tôi làm việc với các công ty khởi nghiệp và doanh nghiệp về Kỹ thuật phần mềm, DevOps, SRE và Kiến trúc đám mây. Tôi viết về trải nghiệm của mình trên https. //ayushsharma. Trong