首页 > 编程问答 >尝试从图像 url 中抓取图像(使用 python urllib ),但获取 html

尝试从图像 url 中抓取图像(使用 python urllib ),但获取 html

时间:2024-07-23 15:04:35浏览次数:15  
标签:python web-scraping urllib

我尝试从以下网址获取图像。

http://upic.me/i/fj/the_wonderful_mist_once_again_01.jpg

我可以右键单击并另存为,但是当我尝试使用urlretrieve like

import urllib
img_url = 'http://upic.me/i/fj/the_wonderful_mist_once_again_01.jpg'
urllib.urlretrieve( img_url, 'cover.jpg')

我发现它是html而不是.jpg图像,但我不知道为什么。 你能告诉我为什么我的方法不起作用吗?有没有可以模仿右键另存为方法的选项?


该网站可能会实施安全措施来阻止直接抓取,比如检查请求中的用户代理。

以下是如何使用 Python 请求库模拟类似于右键单击并另存为的行为:

import requests

img_url = 'http://upic.me/i/fj/the_wonderful_mist_once_again_01.jpg'
headers = {'User-Agent': 'Mozilla/5.0'}  # 设置一个用户代理

response = requests.get(img_url, headers=headers, stream=True)
response.raise_for_status()  # 如果请求不成功,则引发异常

with open('cover.jpg', 'wb') as f:
    for chunk in response.iter_content(chunk_size=8192): 
        f.write(chunk)

这段代码做的事情如下:

  1. 导入 requests 库: 它提供了一种更灵活的方式来处理 HTTP 请求,而不是 urllib。
  2. 设置一个用户代理: 通过在请求头中包含一个用户代理,我们可以让网站认为请求来自于一个真实的浏览器。
  3. 使用流式传输下载图像: stream=True 参数确保我们不会将整个图像一次性加载到内存中,这对大文件很有帮助。
  4. 将图像保存到文件: iter_content() 方法允许我们以块的形式读取响应内容,然后我们将其写入文件。

注意: 抓取网站时请务必尊重其 robots.txt 文件和服务条款。

标签:python,web-scraping,urllib
From: 29433699

相关文章

  • Python-深度学习算法实用指南-全-
    Python深度学习算法实用指南(全)原文:zh.annas-archive.org/md5/844a6ce45a119d3197c33a6b5db2d7b1译者:飞龙协议:CCBY-NC-SA4.0前言深度学习是人工智能领域最受欢迎的领域之一,允许你开发复杂程度各异的多层模型。本书介绍了从基础到高级的流行深度学习算法,并展示了如何使用......
  • 三种语言实现归并排序(C++/Python/Java)
    题目给定你一个长度为......
  • Python中如何实现字符串的查询和替换?
    在Python中,字符串的查询和替换是编程中常见的任务,它们可以通过Python的内置方法和库来高效实现。这些操作对于文本处理、数据清洗、日志分析等场景尤为重要。下面,我将详细阐述如何在Python中实现字符串的查询和替换,包括基础方法、高级技巧以及在实际应用中的注意事项。字符......
  • Python中的`range()`函数及其用法
    range()函数是Python中的一个内置函数,它用于生成一个数字序列。这个函数在循环结构中尤其有用,因为它允许我们迭代一系列的数字,而无需显式地创建这些数字的列表。range()函数通过指定起始值、结束值(不包括)和步长(可选)来工作,返回一个可迭代对象,通常用于for循环中。下面将......
  • python 的注释(例如数据类)可以扩展到它生成的代码中吗?
    能看出python的注释扩展成​​什么吗?例如,对于与数据类相关的错误,有时试图找出它实际生成的代码有点棘手。例如:@dataclass(order=True)classPerson:name:strage:int=0classPerson:def__init__(self,name:str,age=0):self.name=name......
  • Docker:无法在 docker 映像中使用 pythonnet 和 |无法创建默认的 .NET 运行时,该运行时
    我正在尝试使用clrfromPythonnet使用.DLL引用将一种文件类型转换为另一种文件类型。这就是我的代码的样子-importclrclr.AddReference(dll_path)importRxLibrary#ConverttoASCFormat-----------input_file=f"./{filename}.rxd"......
  • 在 Python 中以非常高的质量保存图像
    如何以非常高的质量保存Python绘图?也就是说,当我不断放大PDF文件中保存的对象时,为什么没有任何模糊?另外,什么是最好的模式将其保存在?png,eps?或者其他的?我不能pdf,因为有一个隐藏的数字会扰乱Latexmk编译。要以非常高的质量保存Py......
  • Python字符串:提取重复和随机合并的子字符串
    重复和合并字符串的示例:16.01068.0%08p%.a.p.a.要提取的所需子字符串:16.008%p.a.完整示例:CCoonnttiinnggeennttCCoouuppoonn16.01068.0%08p%.a.p(.Ma.o(nMtholyn)thly)所需子字符串:ContingentCoupon16.008%p.a.(Monthly)我的问题是当原始......
  • Python Pandas 从使用第 3 部分 API 自动生成的 Excel 文件中读取不一致的日期格式
    我正在使用PDF4meAPI将PDF发票转换为Excel文件。API可以正确读取日期。但是,当我打开Excel文件时,日期显示不一致:某些日期以正确的格式(dd/mm/yyyy)显示,而其他日期以错误的mm/dd/yyyy格式显示。当该月的某天小于或等于12时,似乎会出现这种不一致。......
  • python-input键盘输入
     str=input("请输入:")#用户键盘输入#str表示一个字符串类型的变量,input会将读取到的字符串放入str中print(str) aa='请输入:'str=input(aa)#用户键盘输入#str表示一个字符串类型的变量,input会将读取到的字符串放入str中print(str)      ......