首页 > 解决方案 > 如何修复图像下载python

问题描述

我无法保存从汤对象获得的图像,如果我将其复制并粘贴到浏览器中,图像源是正确的,但我似乎无法下载它

我曾经BeautifulSoup找到图像然后requests下载它,我也尝试下载它urllib.urlretrieve但没有工作最后我曾经lxml.html解析并获取图像并使用二进制解码下载它

import bs4,urllib2,requests
REGISTER_URL="http://example.webscraping.com/places/default/user/register?_next=/places/default/index%22"
html=urllib2.urlopen(REGISTER_URL)
soup=bs4.BeautifulSoup(html,"html.parser")
image=soup.find("img",src=True)
print image['src']
#print image['src']
response=requests.get(image['src'])
'''
f=open("Cas.jpg")
for block in response.iter_content(1024):
    f.write(block)
f.close()
'''

我想知道为什么requestsurllib.urlretrieve下载它不起作用,注意:urllib.urlretrieve下载黑色图像,而请求只会给出错误。我的预期结果只是下载验证码图像

注 1:图片是Python 网页抓取示例中的验证码,当然每次加载页面时都会收到一张新图片。

注意2:这绝不是对网站的攻击或任何有害行为,本网站仅作为测试爬虫的示例。

标签: pythonpython-2.7web-scrapingbeautifulsoup

解决方案


图像在网站上以Base64的形式出现。您可以从中获取数据字符串src,对其进行解码,然后另存为图像。

from bs4 import BeautifulSoup
import requests
import base64
url = "http://example.webscraping.com/places/default/user/register?_next=/places/default/index%22"
r=requests.get(url)
soup=BeautifulSoup(r.text,'html.parser')
imgstring=soup.find('img')['src'].split(',')[1]
filename = 'image.jpg'
imgdata = base64.b64decode(imgstring)
with open(filename, 'wb') as f:
    f.write(imgdata)

图像.jpg

在此处输入图像描述


推荐阅读