python - 如何修复图像下载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()
'''
我想知道为什么requests
并urllib.urlretrieve
下载它不起作用,注意:urllib.urlretrieve
下载黑色图像,而请求只会给出错误。我的预期结果只是下载验证码图像
注 1:图片是Python 网页抓取示例中的验证码,当然每次加载页面时都会收到一张新图片。
注意2:这绝不是对网站的攻击或任何有害行为,本网站仅作为测试爬虫的示例。
解决方案
图像在网站上以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
推荐阅读
- mongodb - mongodb聚合从子文档中获取最后一个对象
- mysql - 如何将来自循环的值放入C语言中的SQL表中
- python - 如何跟踪dict中的下一项(递归循环)
- c - 有没有办法从有序条款中取消?
- python - 如何以组织图表的方式绘制有向图?
- android - 如何修复“活动已泄漏 ServiceConnection net.openid.appauth.browser.CustomTabManager$1@41fb56d0 最初绑定在这里”错误
- scroll - 试图限制手风琴内动态生成的行列表以滚动显示在固定高度的卡片中
- ajax - Ajax 在位置 0 的 JSON 中得到错误解析错误和 Unexpected token <?
- android - 无法将 JSONObject 转换为 JSONArray
- c# - 当我在 getresponsedata 上设置断点时,代码运行良好,但没有断点则无法运行