下面的函数,一个更大的类的一部分在除了这个之外的所有图像上都能正常工作 - > http://www.worldbank.org/content/dam/wbr/About/Pres/jyk-hs-offical.png
def _fetch_image_size(self, image_url):
size = None
if '.svg' not in image_url:
response = requests.get(image_url, headers=self._headers)
if response.status_code == 200:
response.raw.decode_content = True
try:
image = Image.open(io.BytesIO(response.content))
size = image.size
except (IOError, OSError) as error:
print error
print image_url
response.close()
return size
当上述函数作为类对象的一部分被调用时,它会引发我这个错误。
无法识别图像文件< _io.BytesIO对象位于0x1062e1b30>
但是在命令行解释器上,当我这样做时
import io, requests
from PIL import Image
response = requests.get('http://www.worldbank.org/content/dam/wbr/About/Pres/jyk-hs-offical.png')
response.raw.decode_content = True
image = Image.open(io.BytesIO(response.content))
print image.size
输出是,
(220, 220)
我无法弄清楚为什么会这样?
答案 0 :(得分:0)
如果有人感兴趣,这就是我如何指出错误的代码。
谢谢你的回复。我已经诊断出了这个问题。在这里粘贴我班上有问题的代码。
def _extract_image_urls(self, soup):
"""
extracts all the <img src=''> tags
Args:
soup (obj): the BeautifulSoup object
Returns:
url (str): string for url
"""
for img in soup.findAll("img", src=True):
yield urlparse.urljoin(self._url, img["src"])
```
以上代码获取了我需要传递给_fetch_image_size()
函数的所有网址。
我修改了我的_fetch_image_size
功能以获得此功能
.....
response = requests.get(image_url, headers=self._headers)
print 'Request URL: {url}'.format(url=image_url)
print 'Response URL: {url}'.format(url=response.url)
.....
这是回复。
s = LinkScraper(&#39; http://www.worldbank.org/en/about/president/about-the-office/bio&#39;) 请求网址:http://www.worldbank.org/content/dam/wbr/img/mobile-menu-lines.png 回复网址:http://www.worldbank.org/content/dam/wbr/img/mobile-menu-lines.png
请求网址:http://www.worldbank.org/etc/designs/wbr/clientlibs/img/icon-search-black.png 回复网址:http://www.worldbank.org/etc/designs/wbr/clientlibs/img/icon-search-black.png
请求网址:http://www.worldbank.org/content/dam/wbr/About/Pres/jyk-hs-offical.png 回复网址:http://www.worldbank.org/404_response.htm 错误:无法识别图像文件&lt; _io.BytesIO对象位于0x112414830&gt;
传递给PIL.Image函数的响应是一个http响应,而不是一个图像! PIL在这里没有错。我需要清理我的网址,以便在这里寻找空白。
感谢@martineau抽出时间。非常感谢。
//鼠标。