>  기사  >  백엔드 개발  >  웹사이트에서 이미지를 크롤링하고 자동으로 로컬로 다운로드

웹사이트에서 이미지를 크롤링하고 자동으로 로컬로 다운로드

WBOY
WBOY원래의
2023-06-13 13:28:503192검색

인터넷 시대에 사람들은 갤러리, 소셜 플랫폼 등 다양한 웹사이트에서 사진을 다운로드하는 데 익숙해졌습니다. 소수의 이미지만 다운로드하면 되는 경우에는 수동 조작이 번거롭지 않습니다. 그러나 많은 수의 사진을 다운로드해야 하는 경우 수동 작업은 매우 시간이 많이 걸리고 힘들게 됩니다. 이때 사진 자동 다운로드를 실현하려면 자동화 기술을 사용해야 합니다.

이 기사에서는 Python 크롤러 기술을 사용하여 웹사이트에서 로컬 컴퓨터로 이미지를 자동으로 다운로드하는 방법을 소개합니다. 이 프로세스는 두 단계로 나뉩니다. 첫 번째 단계는 Python의 요청 라이브러리 또는 셀레늄 라이브러리를 사용하여 웹 사이트의 이미지 링크를 가져오는 것입니다. 두 번째 단계는 얻은 결과에 따라 Python의 urllib 또는 요청 라이브러리를 통해 이미지를 로컬에 다운로드하는 것입니다. 연결.

1단계: 이미지 링크 가져오기

  1. 요청 라이브러리를 사용하여 링크 크롤링

먼저 요청 라이브러리를 사용하여 이미지 링크를 크롤링하는 방법을 살펴보겠습니다. 샘플 코드는 다음과 같습니다.

import requests
from bs4 import BeautifulSoup

url = 'http://example.com'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')

img_tags = soup.find_all('img')

urls = [img['src'] for img in img_tags]

예제 웹사이트를 예로 들면, 먼저 요청 라이브러리를 사용하여 웹 콘텐츠를 크롤링하고 BeautifulSoup 라이브러리를 사용하여 HTML을 구문 분석합니다. 그런 다음 soup.find_all('img') 메서드를 사용하여 HTML의 모든 img 태그를 가져오고 목록 이해를 사용하여 각 태그의 src 속성 값을 추출합니다. soup.find_all('img') 方法来获取 HTML 中所有的 img 标签,并使用列表解析式将每个标签中的 src 属性的值提取出来。

  1. 使用 selenium 库爬取链接

另一种获取图片链接的方式是使用 selenium 库,示例代码如下:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from time import sleep

url = 'http://example.com'

options = Options()
options.add_argument('--headless')

service = Service('/path/to/chromedriver')
driver = webdriver.Chrome(service=service, options=options)
driver.get(url)

sleep(2)

img_tags = driver.find_elements_by_tag_name('img')

urls = [img.get_attribute('src') for img in img_tags]

这里我们使用了 ChromeDriver,使用时需要先将自己电脑上的 ChromeDriver 的路径填入到示例代码中的 'path/to/chromedriver' 处。第二行代码启用无头浏览器,避免在 Chrome 浏览器窗口中进行操作,提高运行速度。然后我们使用 selenium 库中的 webdriver 模块建立了一个 Chrome 浏览器的实例,通过设置 driver.get(url) 来打开 Example 网站。然后使用 driver.find_elements_by_tag_name('img') 获取到所有的 img 标签,进而获取每个标签中的 src 属性的值。

第二步:下载图片

下载图片的方式有多种,这里我们使用 Python 自带的 urllib 库或者 requests 库来下载。示例代码如下:

import urllib.request

for url in urls:
    filename = url.split('/')[-1]
    urllib.request.urlretrieve(url, filename)

这里使用 urllib.request 库将图片从网络上下载到本地,使用 url.split('/')[-1] 来获取图片的文件名,并将其赋值给变量 filename,最后使用 urllib.request.urlretrieve(url, filename) 将图片下载到本地。需要注意的是,如果 url 中包含中文,还需要对 url 进行编码处理。

这里再简单介绍一下使用 requests 库下载图片的方法,示例代码如下:

import requests

for url in urls:
    filename = url.split('/')[-1]
    response = requests.get(url)
    with open(filename, 'wb') as f:
        f.write(response.content)

这里使用 requests 库获取图片二进制文件,将其写入文件。需要注意的是,由于二进制文件写入模式为 'wb',需要使用 with open(filename, 'wb') as f:

    셀레늄 라이브러리를 사용하여 링크 크롤링

    이미지 링크를 얻는 또 다른 방법은 셀레늄 라이브러리를 사용하는 것입니다. 샘플 코드는 다음과 같습니다.

    rrreee🎜여기서는 ChromeDriver를 사용합니다. 먼저 사용하려면 샘플 코드의 'path/to/chromedriver'에 컴퓨터의 ChromeDriver 경로를 입력하세요. 두 번째 코드 줄은 헤드리스 브라우저를 활성화하여 Chrome 브라우저 창에서 작동하지 않고 속도를 높입니다. 그런 다음 Selenium 라이브러리의 webdriver 모듈을 사용하여 Chrome 브라우저의 인스턴스를 생성하고 driver.get(url)을 설정하여 예제 웹 사이트를 엽니다. 그런 다음 driver.find_elements_by_tag_name('img')를 사용하여 모든 img 태그를 가져온 다음 각 태그의 src 속성 값을 가져옵니다. 🎜🎜2단계: 이미지 다운로드 🎜🎜이미지를 다운로드하는 방법에는 여러 가지가 있습니다. 여기서는 Python의 자체 urllib 라이브러리를 사용하거나 다운로드할 라이브러리를 요청합니다. 샘플 코드는 다음과 같습니다. 🎜rrreee🎜여기에서는 urllib.request 라이브러리를 사용하여 인터넷에서 로컬로 이미지를 다운로드하고, url.split('/')[-1]을 사용하여 이미지를 가져옵니다. 이미지의 파일 이름을 지정하고 이를 filename 변수에 할당한 다음 마지막으로 urllib.request.urlretrieve(url, filename)을 사용하여 이미지를 로컬로 다운로드합니다. URL에 중국어가 포함되어 있으면 URL도 인코딩해야 합니다. 🎜🎜다음은 요청 라이브러리를 사용하여 이미지를 다운로드하는 방법에 대한 간략한 소개입니다. 샘플 코드는 다음과 같습니다. 🎜rrreee🎜여기에서는 요청 라이브러리를 사용하여 이미지 바이너리 파일을 가져와 파일에 씁니다. 바이너리 파일 쓰기 모드가 'wb'이므로 파일을 열려면 with open(filename, 'wb') as f:를 사용해야 한다는 점에 유의해야 합니다. 쓰기를 수행하여 각 파일이 제대로 닫혔는지 확인합니다. 🎜🎜요약🎜🎜요약하자면 Python 크롤러 기술을 통해 웹사이트의 이미지를 쉽게 크롤링하고 로컬에서 자동으로 다운로드할 수 있습니다. 이러한 자동화 기술은 업무 효율성을 높이는 데 도움이 되며, 대량의 이미지 처리가 필요한 작업에 매우 유용합니다. 동시에, 웹사이트에서 이미지를 크롤링하는 것은 관련 법률 및 규정을 준수하고 웹사이트의 저작권을 존중해야 한다는 점을 상기할 필요가 있습니다. 웹사이트로부터 공식적인 허가나 승인을 받지 않은 경우, 허가 없이 웹사이트의 이미지를 크롤링하지 마십시오. 🎜

위 내용은 웹사이트에서 이미지를 크롤링하고 자동으로 로컬로 다운로드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.