Chúng tôi sẽ cần khá nhiều thư viện để trích xuất hình ảnh từ một trang web. Trong hướng dẫn về trình quét web cơ bản, chúng tôi đã sử dụng BeautifulSoup, Selenium và pandas để thu thập và xuất dữ liệu thành một. tệp csv. Chúng tôi sẽ thực hiện tất cả các bước trước đó để xuất dữ liệu đã loại bỏ [tôi. e. URL hình ảnh]
Tất nhiên, việc đưa các URL hình ảnh vào một danh sách là không đủ. Chúng tôi sẽ sử dụng một số thư viện khác để lưu trữ nội dung của URL thành một biến, chuyển đổi nó thành một đối tượng hình ảnh và sau đó lưu nó vào một vị trí đã chỉ định. Các thư viện mới mua của chúng tôi là Gối và yêu cầu
Nếu bạn bỏ lỡ phần trước
pip install beautifulsoup4 selenium pandas
Cài đặt các thư viện này là tốt
#install the Pillow library [used for image processing]
pip install Pillow
#install the requests library [used to send HTTP requests]
pip install requests
Ngoài ra, chúng tôi sẽ sử dụng các thư viện tích hợp để tải xuống hình ảnh từ một trang web, chủ yếu để lưu trữ các tệp đã mua của chúng tôi trong một thư mục được chỉ định
Làm lại từ đầu
import pandas as pd
from bs4 import BeautifulSoup
from selenium import webdriver
driver = webdriver.Chrome[executable_path='/nix/path/to/webdriver/executable']
driver.get['//your.url/here?yes=brilliant']
results = []
content = driver.page_source
soup = BeautifulSoup[content]
Quá trình trích xuất dữ liệu của chúng tôi bắt đầu gần như giống hệt nhau [chúng tôi sẽ nhập các thư viện nếu cần]. Chúng tôi chỉ định trình điều khiển web ưa thích của mình, chọn URL từ đó chúng tôi sẽ loại bỏ các liên kết hình ảnh và tạo một danh sách để lưu trữ chúng trong đó. Khi trình điều khiển Chrome của chúng tôi đến URL, chúng tôi sử dụng biến 'nội dung' để trỏ đến nguồn trang và sau đó "cải thiện" nó bằng BeautifulSoup
Trong phần hướng dẫn trước, chúng ta đã thực hiện tất cả các hành động bằng cách sử dụng các hàm tích hợp sẵn và do thư viện xác định. Mặc dù chúng tôi có thể thực hiện một hướng dẫn khác mà không cần xác định bất kỳ chức năng nào, nhưng đây là một công cụ cực kỳ hữu ích cho bất kỳ dự án nào
# Example on how to define a function and select custom arguments for the
# code that goes into it.
def function_name[arguments]:
# Function body goes here.
Chúng tôi sẽ di chuyển trình quét URL của chúng tôi vào một chức năng đã xác định. Ngoài ra, chúng tôi sẽ sử dụng lại cùng mã mà chúng tôi đã sử dụng trong “Hướng dẫn quét web Python. bài viết Step-by-Step” và tái sử dụng nó để cạo các URL đầy đủ
Trước
for a in soup.findAll[attrs={'class': 'class'}]:
name = a.find['a']
if name not in results:
results.append[name.text]
Sau đó
#picking a name that represents the functions will be useful later on.
def parse_image_urls[classes, location, source]:
for a in soup.findAll[attrs={'class': classes}]:
name = a.find[location]
if name not in results:
results.append[name.get[source]]
Lưu ý rằng bây giờ chúng tôi nối thêm theo một cách khác. Thay vì nối thêm văn bản, chúng tôi sử dụng một chức năng khác 'get[]' và thêm một tham số mới 'nguồn' vào đó. Chúng tôi sử dụng 'nguồn' để chỉ ra trường trong trang web nơi lưu trữ các liên kết hình ảnh. Chúng sẽ được lồng trong thẻ ‘src’, ‘data-src’ hoặc các thẻ HTML tương tự khác
Tiến về phía trước với các chức năng được xác định
Giả sử rằng URL mục tiêu của chúng tôi có các liên kết hình ảnh được lồng trong các lớp 'blog-card__link', 'img' và chính URL đó nằm trong thuộc tính 'src' của phần tử. Chúng tôi sẽ gọi chức năng mới được xác định của chúng tôi như vậy
parse_image_urls["blog-card__link", "img", "src"]
Mã của chúng tôi bây giờ sẽ trông giống như thế này
import pandas as pd
from bs4 import BeautifulSoup
from selenium import webdriver
driver = webdriver.Chrome[executable_path='/nix/path/to/webdriver/executable']
driver.get['//your.url/here?yes=brilliant']
results = []
content = driver.page_source
soup = BeautifulSoup[content]
def parse_image_urls[classes, location, source]:
for a in soup.findAll[attrs={'class': classes}]:
name = a.find[location]
if name not in results:
results.append[name.get[source]]
parse_image_urls["blog-card__link", "img", "src"]
Vì đôi khi chúng tôi muốn xuất dữ liệu đã loại bỏ và chúng tôi đã sử dụng pandas trước đó, nên chúng tôi có thể kiểm tra bằng cách xuất mọi thứ thành “. tệp csv”. Nếu cần, chúng tôi luôn có thể kiểm tra mọi lỗi ngữ nghĩa có thể xảy ra theo cách này
________số 8_______
Nếu chúng tôi chạy mã của mình ngay bây giờ, chúng tôi sẽ nhận được một “liên kết. csv” được xuất ngay vào thư mục đang chạy
Giả sử rằng chúng tôi không gặp phải bất kỳ sự cố nào ở cuối phần trước, chúng tôi có thể tiếp tục tải xuống hình ảnh từ các trang web
#import library requests to send HTTP requests
import requests
for b in results:
#add the content of the url to a variable
image_content = requests.get[b].content
Chúng tôi sẽ sử dụng thư viện yêu cầu để lấy nội dung được lưu trữ trong URL hình ảnh. Vòng lặp “for” của chúng tôi ở trên sẽ lặp qua danh sách ‘kết quả’ của chúng tôi
#install the Pillow library [used for image processing]
pip install Pillow
#install the requests library [used to send HTTP requests]
pip install requests
0chúng tôi vẫn chưa hoàn thành. Cho đến giờ, “hình ảnh” mà chúng ta có ở trên chỉ là một đối tượng Python
#install the Pillow library [used for image processing]
pip install Pillow
#install the requests library [used to send HTTP requests]
pip install requests
1Chúng tôi vẫn chưa hoàn thành vì chúng tôi cần tìm một nơi để lưu hình ảnh của mình. Tạo một thư mục “Test” cho mục đích của hướng dẫn này sẽ là lựa chọn dễ dàng nhất
#install the Pillow library [used for image processing]
pip install Pillow
#install the requests library [used to send HTTP requests]
pip install requests
2Để tất cả chúng cùng nhau
Hãy kết hợp tất cả các bước trước đó mà không có bất kỳ bình luận nào và xem nó hoạt động như thế nào. Lưu ý rằng gấu trúc bị mờ đi vì chúng tôi không trích xuất dữ liệu vào bất kỳ bảng nào. Chúng tôi giữ nó vì mục đích thuận tiện. Sử dụng nó nếu bạn cần xem hoặc kiểm tra lại kết quả đầu ra
#install the Pillow library [used for image processing]
pip install Pillow
#install the requests library [used to send HTTP requests]
pip install requests
3Để đạt hiệu quả, chúng tôi thoát trình điều khiển web của mình bằng cách sử dụng “trình điều khiển. thoát []” sau khi truy xuất danh sách URL mà chúng tôi cần. Chúng tôi không còn cần trình duyệt đó nữa vì mọi thứ được lưu trữ cục bộ
Chạy ứng dụng của chúng tôi sẽ xuất ra một trong hai kết quả
Hình ảnh được xuất vào thư mục chúng tôi đã chọn bằng cách xác định biến 'file_path'
Python xuất ra lỗi 403 Forbidden HTTP
Rõ ràng, nhận được kết quả đầu tiên có nghĩa là chúng tôi đã hoàn thành. Chúng tôi sẽ nhận được kết quả thứ hai nếu chúng tôi xóa trang /blog/ của mình. Trong hầu hết các trường hợp, việc khắc phục kết quả thứ hai sẽ mất một ít thời gian, mặc dù đôi khi có thể có những tình huống khó khăn hơn
Bất cứ khi nào chúng tôi sử dụng thư viện yêu cầu để gửi yêu cầu đến máy chủ đích, tác nhân người dùng mặc định “Python-urllib/version. số” được chỉ định. Một số dịch vụ web có thể chặn các tác nhân người dùng này một cách cụ thể vì chúng được đảm bảo là bot. May mắn thay, thư viện yêu cầu cho phép chúng tôi chỉ định bất kỳ tác nhân người dùng nào [hoặc toàn bộ tiêu đề] mà chúng tôi muốn
#install the Pillow library [used for image processing]
pip install Pillow
#install the requests library [used to send HTTP requests]
pip install requests
4Thêm một tác nhân người dùng sẽ là đủ cho hầu hết các trường hợp. Có nhiều trường hợp phức tạp hơn khi máy chủ có thể cố gắng kiểm tra các phần khác của tiêu đề HTTP để xác nhận rằng đó là người dùng chính hãng. Tham khảo hướng dẫn của chúng tôi về các tiêu đề HTTP và thực hành quét web để biết thêm thông tin về cách sử dụng chúng để trích xuất hình ảnh từ các trang web trực tuyến
Dọn dẹp
Nhiệm vụ của chúng tôi đã hoàn thành nhưng mã vẫn còn lộn xộn. Chúng ta có thể làm cho ứng dụng của mình dễ đọc hơn và có thể tái sử dụng bằng cách đặt mọi thứ vào các chức năng đã xác định
#install the Pillow library [used for image processing]
pip install Pillow
#install the requests library [used to send HTTP requests]
pip install requests
5Mọi thứ hiện được lồng trong các chức năng được xác định rõ ràng và có thể được gọi khi nhập. Nếu không, nó sẽ chạy như trước đây
kết thúc
Bằng cách sử dụng mã được nêu ở trên, giờ đây bạn có thể hoàn thành các tác vụ quét hình ảnh cơ bản, chẳng hạn như tải xuống tất cả hình ảnh từ một trang web trong một lần. Nâng cấp trình quét hình ảnh có thể được thực hiện theo nhiều cách khác nhau, hầu hết chúng tôi đã nêu trong phần trước. Chúng tôi khuyên bạn nên nghiên cứu bài viết Yêu cầu Python của chúng tôi để tăng tốc hơn nữa với thư viện được sử dụng trong hướng dẫn này. Hãy xem blog của chúng tôi để biết thêm chi tiết về cách bắt đầu thu thập dữ liệu và xem công cụ quét web đa năng của riêng chúng tôi