Thu thập hình ảnh bằng Python

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('https://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('https://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
0

chú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
1

Chú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
4

Thê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
5

Mọ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

Làm cách nào để trích xuất hình ảnh từ trang web bằng Python?

Để trích xuất tất cả các liên kết hình ảnh, hãy sử dụng. .
từ BeautifulSoup nhập BeautifulSoup
nhập urllib2
nhập lại
html_page = urllib2. urlopen("http. // hình ảnh. com")
cho img trong súp. findAll('img')
hình ảnh. nối thêm (img. nhận ('src'))

Làm cách nào để cạo và tải xuống tất cả hình ảnh từ một trang web bằng Python?

Một mã đơn giản để thực hiện tải xuống. văn bản, 'html. trình phân tích cú pháp') image_tags = súp. find_all('img') url = [img['src'] cho img trong image_tags] cho url trong url. tên tệp = lại. tìm kiếm(r'/([\w_-]+[. ]( jpg. gif. png))$', url) nếu không phải tên tệp. print("Biểu thức chính quy không khớp với url. {}"

Bạn có thể Webscrape bằng Python không?

Thay vì xem trang web việc làm mỗi ngày, bạn có thể sử dụng Python để giúp tự động hóa các phần lặp đi lặp lại trong tìm kiếm việc làm của bạn. Quét web tự động có thể là một giải pháp để tăng tốc quá trình thu thập dữ liệu. Bạn viết mã của mình một lần và nó sẽ nhận được thông tin bạn muốn nhiều lần và từ nhiều trang

Làm cách nào để cạo hình ảnh trong Python Selenium?

Tìm kiếm hình ảnh trên web bằng Python và Selenium .
Cài đặt gói Selenium
Nhập thư viện
Cài đặt trình điều khiển web
Khởi chạy Trình duyệt và Mở URL
Tải hình ảnh
Xem lại cấu trúc HTML của trang web
Tìm và trích xuất hình ảnh
Tải xuống hình ảnh