>

현재 웹 사이트에서 파이썬 자동화 스크립트를 작성하고 있습니다. 클라우드에는 50 ~ 100 개의 이미지가 호스팅되며 모든 이미지는 다음과 같이 구성됩니다.

<img style="width:80px;height:60px;"
     src="http://someimagehostingsite.net/somefolder/some_random_url_with_timestamp">

URL에 .jpg 와 같은 접미사가 없습니다.  또는 .png  정보를 직접 얻을 수 있습니다. 그러나 이미지를 하나씩 다운로드하고 이미지 파일 크기를 가져 와서 만들 수있었습니다. 그러나 모든 URL에 액세스하고 파일 크기를 가져 와서이 프로세스를 자동화해야합니다. 가능합니까?

  • 답변 # 1

    브라우저에서 각 이미지에 대해 HEAD 요청을 보낼 수 있는지 확인할 수 있습니다. Javascript/Ajax의 HTTP HEAD 요청? HTTP 서버가 올바르게 지원하는지에 따라 다릅니다. 또한 Content-Length 헤더를 얻는 방법을 잘 모르겠지만 원하는대로 들립니다.

  • 답변 # 2

    URL로 파일의 콘텐츠 길이를 가져 오려고하면 HTTP 헤더 만 다운로드하고 Content-Length 확인  필드 :

    import requests
    url='https://commons.wikimedia.org/wiki/File:Leptocorisa_chinensis_(20566589316).jpg'
    http_response = requests.get(url)
    print(f"Size of image {url} = {http_response.headers['Content-Length']} bytes")
    
    

    그러나, 이미지를 보내기 전에 서버가 이미지를 압축하면 Content-Length  필드에는 압축되지 않은 이미지 크기가 아닌 압축 파일 크기 (실제로 다운로드되는 데이터 양)가 포함됩니다.

    주어진 페이지의 모든 이미지에 대해 이렇게하려면 BeautifulSoup HTML 처리 라이브러리를 사용하여 페이지의 모든 이미지에 대한 URL 목록을 추출하고 다음과 같이 파일 크기를 확인할 수 있습니다.

    from time import sleep
    import requests
    from bs4 import BeautifulSoup as Soup
    url='https://en.wikipedia.org/wiki/Agent_Orange'
    html = Soup(requests.get(url).text)
    image_links = [(url + a['href']) for a in html.find_all('a', {'class': 'image'})]
    for img_url in image_links:
        response = requests.get(img_url)
        try:
            print(f"Size of image {img_url} = {response.headers['Content-Length']} bytes")
        except KeyError:
            print(f"Server didn't specify content length in headers for {img_url}")
        sleep(0.5)
    
    

    이를 특정 문제에 맞게 조정해야하며 soup.find_all() 에 다른 매개 변수를 전달해야 할 수도 있습니다.  관심있는 특정 이미지로 범위를 좁힐 수 있지만 이와 비슷한 기능을 사용하면 원하는 작업을 수행 할 수 있습니다.

  • 이전 sql server - SQL은 특정 달 이상 발생한 레코드를 식별합니다
  • 다음 javascript - navigatormediaDevicesgetUserMedia를 사용하는 동안 TypeError