如何修复图片下载python

时间:2019-01-19 17:36:16

标签: python python-2.7 web-scraping beautifulsoup

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

我用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 web-scraping example的验证码,当然,每次加载页面时都会收到一个新图像。

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

1 个答案:

答案 0 :(得分:1)

图片在网站上显示为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)

image.jpg

enter image description here