Quét trang web với Hướng dẫn sử dụng món súp Python tuyệt đẹp này

Quét trang web với Hướng dẫn sử dụng món súp Python tuyệt đẹp này

Beautiful Soup là một thư viện Python mã nguồn mở. Nó sử dụng trình phân tích cú pháp điều hướng để loại bỏ nội dung của các tệp XML và HTML. Bạn cần dữ liệu cho một số mục đích phân tích. Tuy nhiên, nếu bạn là người mới sử dụng Python và nạo web, thì thư viện Beautiful Soup của Python rất đáng để thử cho một dự án nạo web.





Với thư viện Beautiful Soup mã nguồn mở của Python, bạn có thể lấy dữ liệu bằng cách cắt bất kỳ phần hoặc phần tử nào của trang web với quyền kiểm soát tối đa đối với quy trình. Trong bài viết này, chúng tôi xem xét cách bạn có thể sử dụng Beautiful Soup để quét một trang web.





Cách cài đặt Beautiful Soup và bắt đầu với nó

Trước khi tiếp tục, trong bài viết hướng dẫn Beautiful Soup này, chúng tôi sẽ sử dụng Python 3 và Beautifulsoup4 , phiên bản mới nhất của Beautiful Soup. Đảm bảo rằng bạn tạo môi trường ảo Python để cô lập dự án của bạn và các gói của nó khỏi những dự án trên máy cục bộ của bạn.





windows 10 đặt gif làm nền

Để bắt đầu, bạn phải cài đặt thư viện Beautiful Soup trong môi trường ảo của mình. Beautiful Soup có sẵn dưới dạng gói PyPi cho tất cả các hệ điều hành, vì vậy bạn có thể cài đặt nó với pip cài đặt beautifulsoup4 lệnh thông qua thiết bị đầu cuối.

Tuy nhiên, nếu bạn đang sử dụng Debian hoặc Linux, lệnh trên vẫn hoạt động, nhưng bạn có thể cài đặt nó bằng trình quản lý gói bằng cách chạy apt-get cài đặt python3-bs4 .



Beautiful Soup không cạo trực tiếp URL. Nó chỉ hoạt động với các tệp HTML hoặc XML được tạo sẵn. Điều đó có nghĩa là bạn không thể chuyển thẳng URL vào đó. Để giải quyết vấn đề đó, bạn cần lấy URL của trang web đích với thư viện yêu cầu của Python trước khi đưa nó vào Beautiful Soup.

Để cung cấp thư viện đó cho trình biên tập của bạn, hãy chạy yêu cầu cài đặt pip lệnh thông qua thiết bị đầu cuối.





Để sử dụng thư viện phân tích cú pháp XML, hãy chạy pip cài đặt lxml để cài đặt nó.

Kiểm tra trang web bạn muốn cạo

Trước khi loại bỏ bất kỳ trang web nào mà bạn không quen thuộc, cách tốt nhất là kiểm tra các yếu tố của nó. Bạn có thể thực hiện việc này bằng cách chuyển trình duyệt của mình sang chế độ của nhà phát triển. Nó khá dễ dàng để sử dụng Chrome DevTools nếu bạn đang sử dụng Google Chrome.





Tuy nhiên, cần phải kiểm tra một trang web để biết thêm về các thẻ HTML, thuộc tính, lớp và id của nó. Làm điều đó cho thấy các yếu tố cốt lõi của một trang web và các loại nội dung của nó.

Nó cũng giúp bạn phát triển các chiến lược tốt nhất mà bạn có thể sử dụng để có được dữ liệu chính xác mà bạn muốn từ một trang web và cách bạn có thể lấy dữ liệu đó.

Cách quét dữ liệu trang web với món súp đẹp mắt

Bây giờ bạn đã có mọi thứ và sẵn sàng, hãy mở một trình soạn thảo mã ưa thích và tạo một tệp Python mới, đặt cho nó một cái tên đã chọn. Tuy nhiên, bạn cũng có thể sử dụng các IDE dựa trên web như Jupyter Notebook nếu bạn không quen với việc chạy Python qua dòng lệnh.

Tiếp theo, nhập các thư viện cần thiết:

from bs4 import BeautifulSoup
import requests

Trước hết, hãy xem thư viện yêu cầu hoạt động như thế nào:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com')
print(website)

Khi bạn chạy đoạn mã trên, nó sẽ trả về trạng thái 200, cho biết rằng yêu cầu của bạn đã thành công. Nếu không, bạn nhận được trạng thái 400 hoặc một số trạng thái lỗi khác cho biết yêu cầu GET không thành công.

Hãy nhớ luôn thay thế URL của trang web trong ngoặc đơn bằng URL mục tiêu của bạn.

Khi bạn nhận được trang web với hiểu được yêu cầu, sau đó bạn chuyển nó cho Beautiful Soup, hiện có thể đọc nội dung dưới dạng tệp HTML hoặc XML bằng cách sử dụng trình phân tích cú pháp XML hoặc HTML tích hợp của nó, tùy thuộc vào định dạng bạn đã chọn.

Hãy xem đoạn mã tiếp theo này để biết cách thực hiện việc này với trình phân tích cú pháp HTML:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup)

Đoạn mã trên trả về toàn bộ DOM của một trang web có nội dung của nó.

Bạn cũng có thể có được phiên bản DOM phù hợp hơn bằng cách sử dụng làm sạch phương pháp. Bạn có thể thử cái này để xem đầu ra của nó:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.prettify())

Bạn cũng có thể lấy nội dung thuần túy của một trang web mà không cần tải phần tử của nó bằng .chữ phương pháp:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.text)

Cách cạo nội dung của trang web theo tên thẻ

Bạn cũng có thể trích xuất nội dung trong một thẻ cụ thể với Beautiful Soup. Để thực hiện việc này, bạn cần bao gồm tên của thẻ mục tiêu trong yêu cầu quét Súp đẹp của mình.

Ví dụ: hãy xem cách bạn có thể lấy nội dung trong h2 thẻ của một trang web.

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.h2)

Trong đoạn mã trên, súp.h2 trả về cái đầu tiên h2 phần tử của trang web và bỏ qua phần còn lại. Để tải tất cả h2 các yếu tố, bạn có thể sử dụng find_all chức năng tích hợp và vòng lặp của Python:

cách kết nối công tắc nintendo với TV
from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
h2tags = soup.find_all('h2')
for soups in h2tags:
print(soups)

Khối mã đó trả về tất cả h2 các yếu tố và nội dung của chúng. Tuy nhiên, bạn có thể lấy nội dung mà không cần tải thẻ bằng cách sử dụng .dây phương pháp:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
h2tags = soup.find_all('h2')
for soups in h2tags:
print(soups.string)

Bạn có thể sử dụng phương pháp này cho bất kỳ thẻ HTML nào. Tất cả những gì bạn cần làm là thay thế h2 gắn thẻ với một trong những bạn thích.

Tuy nhiên, bạn cũng có thể loại bỏ nhiều thẻ hơn bằng cách chuyển danh sách các thẻ vào find_all phương pháp. Ví dụ: khối mã bên dưới loại bỏ nội dung của đến , h2 , và chức vụ các thẻ:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
tags = soup.find_all(['a', 'h2', 'title'])
for soups in tags:
print(soups.string)

Cách cạo trang web bằng ID và tên lớp

Sau khi kiểm tra một trang web bằng DevTools, nó cho bạn biết thêm về các thuộc tính id và lớp giữ mỗi phần tử trong DOM của nó. Khi bạn có phần thông tin đó, bạn có thể loại bỏ trang web đó bằng phương pháp này. Nó hữu ích khi nội dung của một thành phần đích đang lặp lại từ cơ sở dữ liệu.

Bạn có thể dùng tìm thấy phương thức cho trình quét id và lớp. Không giống như find_all phương thức trả về một đối tượng có thể lặp lại, tìm thấy phương thức hoạt động trên một mục tiêu duy nhất, không thể lặp lại, đó là Tôi trong trường hợp này. Vì vậy, bạn không cần phải sử dụng vòng lặp với nó.

Hãy xem một ví dụ về cách bạn có thể cắt nội dung của một trang bên dưới bằng cách sử dụng id:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
id = soup.find(id = 'enter the target id here')
print(id.text)

Để thực hiện việc này cho một tên lớp, hãy thay thế Tôi với lớp . Tuy nhiên, viết lớp trực tiếp dẫn đến nhầm lẫn cú pháp vì Python xem nó như một từ khóa. Để bỏ qua lỗi đó, bạn cần viết dấu gạch dưới trước lớp như sau: lớp_ .

Về bản chất, dòng chứa id trở thành:

my_classes = soup.find(class_ = 'enter the target class name here')
print(my_classes.text)

Tuy nhiên, bạn cũng có thể loại bỏ một trang web bằng cách gọi một tên thẻ cụ thể với id hoặc lớp tương ứng của nó:

data = soup.find_all('div', class_ = 'enter the target class name here')
print(data)

Cách làm Scraper có thể tái sử dụng với món súp đẹp mắt

Bạn có thể tạo một lớp và đặt tất cả mã trước đó lại với nhau thành một hàm trong lớp đó để tạo một trình quét có thể sử dụng lại lấy nội dung của một số thẻ và id của chúng. Chúng ta có thể làm điều này bằng cách tạo một hàm chấp nhận năm đối số: một URL, hai tên thẻ và id hoặc lớp tương ứng của chúng.

Giả sử bạn muốn tìm kiếm giá áo sơ mi từ một trang web thương mại điện tử. Lớp quét ví dụ bên dưới trích xuất các thẻ giá và áo sơ mi với id hoặc lớp tương ứng của chúng và sau đó trả về nó dưới dạng khung dữ liệu Pandas với 'Giá' và Tên_chỉ làm tên cột.

Đảm bảo rằng bạn pip cài đặt gấu trúc thông qua thiết bị đầu cuối nếu bạn chưa làm như vậy.

import pandas as pd
class scrapeit:
try:
def scrape(website=None, tag1=None, id1=None, tag2=None, id2=None):
if not (website and tag1 and id1 and tag2 and id2)==None:
try:
page = requests.get(website)
soup = BeautifulSoup(page.content, 'html.parser')
infotag1 = soup.find_all(tag1, id1)
infotag2 = soup.find_all(tag2, id2)
priced = [prices.text for prices in infotag1]
shirt = [shirts.text for shirts in infotag2]
data = {
'Price':priced,
'Shirt_name':shirt}
info = pd.DataFrame(data, columns=['Price', 'Shirt_name'])
print(info)
except:
print('Not successful')
else:
print('Oops! Please enter a website, two tags and thier corresponding ids')
except:
print('Not successful!')

Máy quét bạn vừa tạo là một mô-đun có thể tái sử dụng và bạn có thể nhập và sử dụng nó trong một tệp Python khác. Để gọi cho cạo chức năng từ lớp của nó, bạn sử dụng scrapeit.scrape ('URL trang web', 'price_tag', 'price_id', 'shirt_tag', 'shirt_id') . Nếu bạn không cung cấp URL và các thông số khác, khác tuyên bố nhắc bạn làm như vậy.

Để sử dụng trình quét đó trong một tệp Python khác, bạn có thể nhập nó như sau:

from scraper_module import scrapeit
scrapeit.scrape('URL', 'price_tag', 'price_id', 'shirt_tag', 'shirt_id')

Ghi chú: scraper_module là tên của tệp Python chứa lớp quét.

Bạn cũng có thể kiểm tra Tài liệu về Súp đẹp nếu bạn muốn tìm hiểu sâu hơn về cách bạn có thể sử dụng nó tốt nhất.

Beautiful Soup là một công cụ soạn thảo trang web có giá trị

Beautiful Soup là một công cụ quét màn hình Python mạnh mẽ cho phép bạn kiểm soát cách dữ liệu của bạn đi qua trong quá trình quét. Đó là một công cụ kinh doanh có giá trị, vì nó có thể cung cấp cho bạn quyền truy cập vào dữ liệu web của đối thủ cạnh tranh như giá cả, xu hướng thị trường, v.v.

cách thêm dòng trên word

Mặc dù chúng tôi đã tạo công cụ quét thẻ trong bài viết này, nhưng bạn vẫn có thể sử dụng thư viện Python mạnh mẽ này để tạo ra các công cụ cạo hữu ích hơn.

Đăng lại Đăng lại tiếng riu ríu E-mail Công cụ Scraping Web Tốt nhất Trực tuyến

Cần thu thập dữ liệu từ các trang web cho mục đích phân tích? Những công cụ quét web này giúp bạn dễ dàng.

Đọc tiếp
Chủ đề liên quan
  • Lập trình
  • Python
Giới thiệu về tác giả Idisou Omisola(Đã xuất bản 94 bài báo)

Idowu đam mê mọi thứ về công nghệ và năng suất thông minh. Trong thời gian rảnh rỗi, anh ấy chơi với mã hóa và chuyển sang bàn cờ khi anh ấy chán, nhưng anh ấy cũng thích thoát khỏi thói quen thỉnh thoảng. Niềm đam mê của anh ấy trong việc chỉ ra cho mọi người cách thức xung quanh công nghệ hiện đại đã thúc đẩy anh ấy viết nhiều hơn.

Xem thêm từ Idowu Omisola

Theo dõi bản tin của chúng tôi

Tham gia bản tin của chúng tôi để biết các mẹo công nghệ, đánh giá, sách điện tử miễn phí và các ưu đãi độc quyền!

Bấm vào đây để đăng ký