Python使用BeautifulSoup&;从url获取图像路径和大小;皮尔

Python使用BeautifulSoup&;从url获取图像路径和大小;皮尔,python,beautifulsoup,python-imaging-library,Python,Beautifulsoup,Python Imaging Library,我成功创建了一个python脚本,可以从指定的url打印所有图像路径: from requests_html import HTMLSession from urllib.request import urlopen from bs4 import BeautifulSoup import requests url="https://www.example.com/" session = HTMLSession() r = session.get(url) b = r

我成功创建了一个python脚本,可以从指定的url打印所有图像路径:

from requests_html import HTMLSession
from urllib.request import urlopen
from bs4 import BeautifulSoup
import requests

url="https://www.example.com/"

session = HTMLSession()
r = session.get(url)

b  = requests.get(url)
soup = BeautifulSoup(b.text, "lxml")

images = soup.find_all('img')

for img in images:
    if img.has_attr('src') :
        print(img['src'])
我现在想做的是使用PIL打印图像大小以及打印的url。我尝试过这个,但它出现了错误:

from requests_html import HTMLSession
from urllib.request import urlopen
from bs4 import BeautifulSoup
from PIL import Image
import requests

url="https://www.example.com/"

session = HTMLSession()
r = session.get(url)

b  = requests.get(url)
soup = BeautifulSoup(b.text, "lxml")

images = soup.find_all('img')

for img in images:
    if img.has_attr('src') :
        ## Get image sizes in PIL
        imgsize = Image.open(requests.get(img, stream=True).raw)
        print(img['src'], imgsize.size)

有什么办法可以让它工作吗?

你应该使用
img['src']
而不是
img

requests.get(img['src'], ...).raw

上一个代码段的错误是什么?是错误还是什么?始终将完整的错误消息(从单词“Traceback”开始)作为文本(不是屏幕截图,也不是指向外部门户的链接)进行讨论(不是评论)。还有其他有用的信息。为什么在
请求中使用
img
。get()
?您应该使用
img['src']
-
requests.get(img['src'],…)
我对它进行了测试,它运行正常@章节将
imgsize=Image.open(requests.get(img,stream=True.raw)
更改为
imgsize=Image.open(requests.get(img['src],stream=True.raw)
。您可能需要将此代码块包装在
try-except
块中,以处理格式错误的URL和无法工作的URL。谢谢。是的,这很有效。但我确实在一些图像上遇到了一个错误:PIL.UnidentifiedImageError:无法识别图像文件。有什么办法解决这个问题吗?图像来自CDN,例如。也许这会导致问题?您可以使用
print()
检查从服务器获取的内容。也许它会向机器人/脚本/垃圾邮件/黑客发出警告,而不是图像。或者,在发送图像之前,它可能使用
热链接保护
并检查标题
referer
——这样它只在您访问原始页面时发送图像。但是,当我使用问题顶部的脚本打印所有图像路径时,您可以在
请求中设置标题
referer
,它们打印得很好。只有当我尝试打印图像大小时,它才会出错。