Thu thập hình ảnh từ trang web python

Quy trình xây dựng ứng dụng machine learning, deep learning hay AI có mấy bước. Một trong số đó là phân tích dữ liệu và tìm ra phần nào của dữ liệu có thể sử dụng được và phần nào không. Chúng ta cũng cần chọn các thuật toán học máy hoặc kiến ​​trúc mạng thần kinh mà chúng ta cần sử dụng để giải quyết vấn đề. Chúng tôi thậm chí có thể chọn sử dụng học tăng cường hoặc học chuyển giao. Tuy nhiên, thường khách hàng không có dữ liệu có thể giải quyết vấn đề của họ. Thông thường, công việc của chúng tôi là lấy dữ liệu từ trang web sẽ được sử dụng bởi thuật toán học máy hoặc mạng nơ-ron

,
,
,
,
,
,
,
,
]

Bây giờ, chúng tôi cần sử dụng thông tin đó và lấy dữ liệu từ từng cá nhân  liên kết . Chúng tôi cũng cần lưu trữ các tập tin. Trước tiên, hãy trích xuất các liên kết URL và tên hình ảnh cho từng hình ảnh từ biến  aas  .

image_info = []

for a in aas:
    image_tag = a.findChildren["img"]
    image_info.append[[image_tag[0]["src"], image_tag[0]["alt"]]]

Chúng tôi sử dụng chức năng  findChildren  cho từng thành phần trong  aas  array and append it’s attributes to image_info list. Here is the  kết quả .

________số 8

Tuyệt vời, chúng tôi có liên kết và tên hình ảnh, tất cả những gì chúng tôi cần làm là tải xuống dữ liệu. Với mục đích đó, chúng tôi xây dựng hàm download_image

def download_image[image]:
    response = requests.get[image[0], stream=True]
    realname = ''.join[e for e in image[1] if e.isalnum[]]
    
    file = open["./images_bs/{}.jpg".format[realname], 'wb']
    
    response.raw.decode_content = True
    shutil.copyfileobj[response.raw, file]
    del response

Đây là một chức năng đơn giản. trước tiên, chúng tôi gửi yêu cầu tới URL mà chúng tôi đã trích xuất từ ​​​​HTML. Sau đó, dựa trên tiêu đề, chúng tôi tạo  tệp  tên. Trong quá trình này, chúng tôi xóa tất cả khoảng trắng và ký tự đặc biệt. Cuối cùng, chúng tôi tạo một tệp có tên thích hợp và sao chép tất cả  dữ liệu  từ response into that file using shutil. In the end we call all the function for each image in the list:

pip install scrapy
0

Bạn có thể tìm thấy  kết quả  trong thư mục xác định.

Tất nhiên, giải pháp này có thể được khái quát hóa hơn nữa và thực hiện dưới dạng một lớp. Một cái gì đó như thế này

pip install scrapy
1

Nó khá giống nhau, bây giờ bạn có thể tạo nhiều đối tượng của lớp này với các URL và cấu hình khác nhau

2. Cạo ảnh bằng Scrapy

Công cụ khác mà chúng tôi có thể sử dụng để tải xuống hình ảnh là Scrapy . Mặc dù Beautiful Soup trực quan và rất đơn giản để sử dụng nhưng bạn vẫn cần sử dụng các thư viện khác và mọi thứ có thể trở nên lộn xộn . if we are working on bigger project. Scrapy rất phù hợp cho những trường hợp đó. Sau khi thư viện này được cài đặt, bạn có thể tạo dự án Scrapy mới bằng lệnh này.

pip install scrapy
2

Điều này sẽ tạo cấu trúc dự án tương tự như cấu trúc dự án Django. Các tệp thú vị là cài đặt. py, các mặt hàng. py và ImgSpyder. py

Điều đầu tiên chúng ta cần làm là thêm tệp hoặc hình ảnh  đường dẫn  vào settings.py. Trong ví dụ này, chúng tôi thêm  hình ảnh  đường dẫn. Ngoài ra, vị trí lưu trữ hình ảnh cần được thêm vào. Đó là lý do tại sao chúng tôi thêm hai dòng này vào cài đặt.

pip install scrapy
3

Sau đó, chúng ta chuyển sang  các mục . py . Tại đây, chúng tôi xác định  cấu trúc  của các mục đã tải xuống. Trong trường hợp này, chúng tôi sử dụng  Scrapy  để tải xuống hình ảnh, tuy nhiên, đây là một công cụ mạnh mẽ để tải xuống các loại  khác< . Đây là những gì trông giống như.  of data as well. Here is what that looks like:

pip install scrapy
4

Ở đây chúng ta đã xác định  ImageItem  kế thừa lớp  Item  . Chúng tôi xác định hai trường bắt buộc khi làm việc với Scrapy. We define two mandatory fields when we work with  Đường dẫn hình ảnh . hình ảnh  và  images_url  và chúng tôi định nghĩa chúng là scrapy.Field[]. Điều quan trọng cần lưu ý là các trường này  phải  có các tên này. Ngoài ra, hãy lưu ý rằng  img_urls  cần phải là một danh sách và cần chứa  URL tuyệt đối . For this reason we have to create a function to transform relative URLs to absolute URLs. Finally, we implement  trình thu thập dữ liệu  trong  ImgSpyder. py.

pip install scrapy
5

Trong tệp này, chúng tôi tạo lớp  ImgSpyder  kế thừa  Spider  class from Scrapy. This class essentially is used for crawling and downloading data. You can see that each  Spider  có  tên . Tên này được sử dụng để chạy quy trình sau này. Trường  start_urls  xác định trang web nào được thu thập dữ liệu. Khi chúng tôi bắt đầu  Spider , nó sẽ gửi yêu cầu đến các trang được xác định trong  start_urls .

Phản hồi được xử lý theo phương pháp  phân tích  mà chúng tôi  ghi đè < . Sau đó, chúng tôi sử dụng in ImgSpider class. Effectively this means that, when we run this example, it sends request to  http. // mã rubik. net  rồi xử lý phản hồi theo phương thức  parse  . Trong phương pháp này, chúng tôi tạo  phiên bản  của  ImageItem . Then we use  css  bộ chọn để trích xuất URL hình ảnh và lưu trữ chúng trong  img_urls . Cuối cùng, chúng tôi đặt mọi thứ từ   array. Finally, we put everything from  img_urls  mảng vào  ImageItem  đối tượng. Lưu ý rằng chúng ta không cần phải thêm bất cứ thứ gì vào trường  hình ảnh  của lớp, như vậy là  đã xong  by Scrapy. Let’s  chạy  trình thu thập dữ liệu này bằng lệnh này.

pip install scrapy
6

Chúng tôi sử dụng tên được xác định trong lớp. Cách khác để chạy trình thu thập thông tin này là như thế này

pip install scrapy
7

4. Quét hình ảnh từ Google bằng Selenium

Trong cả hai trường hợp trước, chúng tôi đã khám phá cách chúng tôi có thể tải xuống hình ảnh từ một trang web. Tuy nhiên, nếu chúng tôi muốn tải xuống số lượng lớn hình ảnh, thực hiện tìm kiếm Google có lẽ là lựa chọn tốt nhất. Quá trình này cũng có thể được tự động hóa. Để tự động hóa, chúng ta có thể sử dụng Selenium

Công cụ này được sử dụng cho nhiều loại tự động hóa khác nhau, ví dụ, nó rất tốt cho tự động hóa thử nghiệm. Trong hướng dẫn này, chúng tôi sử dụng nó để thực hiện tìm kiếm cần thiết trong Google và tải xuống hình ảnh. Lưu ý rằng để tính năng này hoạt động, bạn phải cài đặt Google Chrome và sử dụng ChromeDriver tương ứng như được mô tả trong phần đầu tiên của bài viết này

Selenium rất dễ sử dụng, tuy nhiên trước tiên bạn cần nhập nó

pip install scrapy
8

Khi điều này được thực hiện, bạn cần xác định đường dẫn đến ChromeDriver

pip install scrapy
9

Sau khi bạn thực hiện việc này, Google Chrome sẽ tự động được mở. Từ thời điểm này, chúng ta có thể thao tác với biến wd bằng cách sử dụng biến này. Hãy lên google. com

pip install selenium
0

Mát mẻ. Bây giờ, hãy triển khai một lớp thực hiện tìm kiếm trên google và tải xuống hình ảnh từ trang đầu tiên

pip install selenium
1

Ok, đó là rất nhiều mã. Hãy điều tra nó từng mảnh một. Chúng tôi bắt đầu từ hàm tạo của lớp

pip install selenium
2

Thông qua hàm tạo của lớp, chúng tôi tiêm webdriver. Ngoài ra, chúng tôi xác định số lượng hình ảnh từ trang đầu tiên mà chúng tôi muốn tải xuống. Tiếp theo, hãy quan sát phương thức công khai duy nhất của lớp này – srape_images[]

pip install selenium
3

Phương thức này định nghĩa một luồng và sử dụng các phương thức khác từ lớp này. Lưu ý rằng một trong các tham số trong cụm từ truy vấn được sử dụng bên trong Tìm kiếm của Google. Ngoài ra, thư mục lưu trữ hình ảnh cũng được đưa vào phương pháp này. Dòng chảy diễn ra như thế này

  • Chúng tôi tạo một thư mục cho tìm kiếm cụ thể
  • Chúng tôi nhận được tất cả các liên kết từ hình ảnh bằng phương thức _get_info
  • Chúng tôi tải xuống hình ảnh bằng phương thức _download_image

Hãy khám phá thêm một chút về các phương thức riêng tư này

pip install selenium
4

Mục đích của phương thức _get_info là lấy các liên kết cần thiết của hình ảnh. Xin lưu ý rằng sau khi thực hiện tìm kiếm trong google, chúng tôi sử dụng find_elements_by_css_selector, với giá trị nhận dạng css thích hợp. Điều này rất giống với những điều chúng tôi đã làm với BeautifulSoup và Scrapy. Một điều nữa chúng ta nên chú ý là chúng ta cần nhấp vào từng hình ảnh để có được độ phân giải tốt của hình ảnh. Sau đó, chúng ta cần sử dụng lại find_elements_by_css_selector. Khi đã xong, liên kết chính xác sẽ được lấy. Phương pháp riêng tư thứ hai là _download_image

Chủ Đề