我想从网络上下载图像,但是无论使用哪种方法,我总是会收到错误消息。但是,使用此方法下载其他图像没有问题。
方法1
使用Python的请求和Pillow库。此处应从网址直接下载图片。
import nltk
tokenizer = nltk.tokenize.punkt.PunktSentenceTokenizer()
fp = open("/Users/Desktop/sample.txt", encoding='utf-8')
data = fp.read()
with open("/Users/Desktop/output.txt", 'a', encoding='utf-8' ) as f:
f.write(''.join(tokenizer.tokenize(data)))
f.close()
我收到以下错误:
import requests
from PIL import Image
from io import BytesIO
url = 'https://mobec.sk/proxy/geo?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=true&layers=custom%3Avrbovce_elektrina&tiled=true&STYLES=&WIDTH=512&HEIGHT=512&CRS=EPSG%3A3857&FORMAT_OPTIONS=dpi%3A180&BBOX=1947003.9844800085%2C6242153.477880634%2C1949449.969385134%2C6244599.46278576'
response = requests.get(url)
img = Image.open(BytesIO(response.content)) # error occurs here
img.save('output.png')
方法2
使用Python的Selenium库和chromedriver。在这里,我试图在Web浏览器中显示图像,并使用Selenium库将整个页面打印到屏幕上。
OSError: cannot identify image file <_io.BytesIO object at 0x04956510>
此方法的问题在于,该图像未在由chromedriver驱动程序打开的Chrome浏览器中加载(显示)。手动将链接粘贴到普通(桌面应用程序)Chrome中时,将显示图像。
答案 0 :(得分:1)
我在两个链接上都测试了这两种方法,第二个链接似乎出了点问题:第一个工作得很好,无论是使用浏览器手动打开它还是使用其中任何一种方法;第二个方法无法在浏览器中打开,并且在这两种方法中均出错(都很好用代码)。
在错误消息Could not find layer custom:vrbovce_elektrina
中,无论是在方法还是手动粘贴中,浏览器都找不到名为vrbovce_elektrina
的图层。也许这里有错字,或者此页面上没有这样的图像/图层。
代码很好,只是链接不起作用。
答案 1 :(得分:1)
正如@Piotrek所写,问题不在代码中。我猜问题出在服务器端。这对我有用:
这是对我有用的代码:
from selenium import webdriver
from PIL import Image
from io import BytesIO
web_driver = webdriver.Chrome('path/to/chromedriver')
web_driver.get('https://mobec.sk/vrbovce#base')
web_driver.get('https://mobec.sk/proxy/geo?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=true&layers=custom%3Avrbovce_elektrina&tiled=true&STYLES=&WIDTH=512&HEIGHT=512&CRS=EPSG%3A3857&FORMAT_OPTIONS=dpi%3A180&BBOX=1947003.9844800085%2C6242153.477880634%2C1949449.969385134%2C6244599.46278576')
png = web_driver.get_screenshot_as_png()
im = Image.open(BytesIO(png))
im.save('output.png')
web_driver.quit()
答案 2 :(得分:0)
使用请求,只需将响应内容写入文件:
with open('image-file', 'wb') as fp:
fp.write(response.content)
答案 3 :(得分:0)
您可以使用StringIO库。
import requests
from PIL import Image
from StringIO import StringIO
url = 'https://mobec.sk/proxy/geo?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image%2Fpng8&TRANSPARENT=true&layers=global%3Abase&tiled=true&STYLES=&WIDTH=512&HEIGHT=512&CRS=EPSG%3A3857&FORMAT_OPTIONS=dpi%3A180&BBOX=1934774.0599543825%2C6239707.492975509%2C1937220.044859508%2C6242153.477880634'
response = requests.request("GET", url)
image = Image.open(StringIO(response.content))
image.save('output.png')
对于python3;
import requests
from PIL import Image
from io import BytesIO
url = 'https://mobec.sk/proxy/geo?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image%2Fpng8&TRANSPARENT=true&layers=global%3Abase&tiled=true&STYLES=&WIDTH=512&HEIGHT=512&CRS=EPSG%3A3857&FORMAT_OPTIONS=dpi%3A180&BBOX=1934774.0599543825%2C6239707.492975509%2C1937220.044859508%2C6242153.477880634'
response = requests.request("GET", url)
image = Image.open(BytesIO(response.content))
image.save('output.png')