我无法保存从汤对象获得的图像,如果我将其复制并粘贴到浏览器中,则图像来源是正确的,但是我似乎无法下载
我用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()
'''
我想知道为什么requests
和urllib.urlretrieve
无法下载,请注意:urllib.urlretrieve
下载黑色图像,而请求仅给出错误。
我的预期结果只是下载验证码图片
注意1 :该图像是Python web-scraping example的验证码,当然,每次加载页面时都会收到一个新图像。
注意2 :这绝不是对网站的攻击或任何有害行为,该网站仅作为示例测试刮板。
答案 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