python使用grequests爬取图片保存到本地
python使用grequests爬取图片保存到本地,代码怎么写?比如图片链接是https://img3.doubanio.com/view/photo/s_ratio_poster/public/p480747492.webp 使用grequests库爬取图片并保存到本地,首先需要安装grequests库:pip install grequests
然后根据图片链接创建一个请求对象,并指定回调函数用于处理响应:
import grequests
image_url = 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p480747492.webp'
def save_image(response, *args, **kwargs):
# 获取图片文件名
file_name = image_url.split('/')[-1]
# 保存图片到本地
with open(file_name, 'wb') as f:
f.write(response.content)
print(f"图片 {file_name} 已保存!")
# 创建请求对象
req = grequests.get(image_url, hooks=dict(response=save_image))
# 发送请求并等待响应
grequests.map()
以上代码中,`image_url`是要下载的图片链接。定义了一个名为`save_image`的回调函数,用于将响应内容保存到本地。在回调函数中,我们可以通过`response.content`获取到图片的二进制数据。
然后,利用`grequests.get()`创建一个请求对象,将回调函数与请求对象绑定。
最后,使用`grequests.map()`发送请求并等待响应。请求完成后,会自动触发回调函数保存图片到本地。
请注意,由于grequests使用了异步请求,所以在处理多个请求时,可以大大提高爬取速度。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-2-17 18:03
使用grequests库爬取图片并保存到本地,首先需要安装grequests库:
import pathlib
import grequests
from pyquery import PyQuery
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0"
}
ooo = 1
for i in range(0,226,25):
ressss = grequests.get(f"https://movie.douban.com/top250?start={i}&filter=",headers=headers),
bbbb = grequests.map(ressss)
a = bbbb.text
py_qu = PyQuery(a)
aa = py_qu.find("img").items()
for pp in aa:
urls = pp.attr("src")
path_p = pathlib.Path(f"pic/{ooo}.jpg")
path_p.write_text(urls)
ooo = ooo + 1
爬到的数据不行,没有添加content,请问在哪里添加content呢? python小小白哟 发表于 2024-02-17 18:41
import pathlib
import grequests
from pyquery imp ...
在你的代码中,你已经通过`res = grequests.get()`发送了请求,但是你没有使用`res.content`来获取图片的二进制数据。为了将图片内容保存到本地,你需要在循环中使用`res.content`,并将其写入文件。下面是修改后的代码:
import pathlib
import grequests
from pyquery import PyQuery
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0"
}
ooo = 1
for i in range(0, 226, 25):
res = grequests.get(f"https://movie.douban.com/top250?start={i}&filter=", headers=headers)
bbbb = grequests.map()# 注意这里需要将请求对象放入列表中
a = bbbb.content# 获取响应内容
py_qu = PyQuery(a)
aa = py_qu.find("img").items()
for pp in aa:
url = pp.attr("src")
path_p = pathlib.Path(f"pic/{ooo}.jpg")
with open(path_p, 'wb') as f:# 将图片内容写入文件
f.write(url)
ooo += 1
希望这次能够成功保存爬取到的图片内容到本地。请注意,在写入文件时,需要以二进制(`'wb'`)模式打开文件,并使用`write()`方法将图片内容写入文件中。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-2-17 18:41
在你的代码中,你已经通过`res = grequests.get()`发送了请求,但是你没有使用`res.content`来获取图片 ...
webp的内容是https://img3.doubanio.com/view/photo/s_ratio_poster/public/p480747492.jpg python小小白哟 发表于 2024-02-17 18:46
webp的内容是https://img3.doubanio.com/view/photo/s ...
如果要下载webp格式的图片,你需要修改图片的链接为webp格式链接,并将保存的文件名后缀也修改为.webp。下面是修改后的代码:import pathlibimport grequestsfrom pyquery import PyQueryheaders = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0"}ooo = 1for i in range(0, 226, 25): res = grequests.get(f"https://movie.douban.com/top250?start={i}&filter=", headers=headers) bbbb = grequests.map() a = bbbb.content py_qu = PyQuery(a) aa = py_qu.find("img").items() for pp in aa: url = pp.attr("src") if url.endswith('.webp'): url = url.replace('https://img3.doubanio.com/view/photo/s_ratio_poster/public', 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p480747492.jpg') # 将webp链接替换为jpg链接 path_p = pathlib.Path(f"pic/{ooo}.webp")# 修改文件名后缀为.webp with open(path_p, 'wb') as f: f.write(url) ooo += 1希望这次能够成功保存爬取到的.webp格式的图片内容到本地。注意,在将webp链接替换为jpg链接时,需要根据你的需求进行相应的替换。同时,将保存的文件名后缀修改为.webp。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-2-17 18:41
在你的代码中,你已经通过`res = grequests.get()`发送了请求,但是你没有使用`res.content`来获取图片 ...
报错 a bytes-like object is required, not 'str' python小小白哟 发表于 2024-02-17 18:48
报错 a bytes-like object is required, not 'str'
对不起,我的错误。在打开文件并写入内容时,要确保将二进制数据写入文件而不是字符串。以下是修改后的代码:
import pathlib
import grequests
from pyquery import PyQuery
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0"
}
ooo = 1
for i in range(0, 226, 25):
urls =
ress = (grequests.get(url, headers=headers) for url in urls)
responses = grequests.map(ress)
for response in responses:
a = response.content
py_qu = PyQuery(a)
aa = py_qu.find("img").items()
for pp in aa:
url = pp.attr("src")
path_p = pathlib.Path(f"pic/{ooo}.jpg")
with open(path_p, 'wb') as f:
f.write(url.encode('utf-8'))
ooo += 1
这次,我们使用`url.encode('utf-8')`将URL转换为字节数据,然后再将其写入文件中。这样就能够成功保存爬取到的图片内容到本地了。请尝试运行代码并查看结果。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-2-17 18:48
对不起,我的错误。在打开文件并写入内容时,要确保将二进制数据写入文件而不是字符串。以下是修改后的 ...
import pathlib
import grequests
from pyquery import PyQuery
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0"
}
ooo = 1
for i in range(0,226,25):
ressss = grequests.get(f"https://movie.douban.com/top250?start={i}&filter=",headers=headers),
bbbb = grequests.map(ressss)
a = bbbb.content
py_qu = PyQuery(a)
aa = py_qu.find("img").items()
for pp in aa:
urls = pp.attr("src")
path_p = pathlib.Path(f"pic/{ooo}.webp")
path_p.write_text(urls)
ooo = ooo + 1
以上代码运行后,保存的图片格式是webp,但是我用pycharm打开后没有正常显示图片,显示的是一个图片链接。 python小小白哟 发表于 2024-02-17 18:53
import pathlib
import grequests
from pyquery imp ...
你好,在代码中,你使用了`path_p.write_text(urls)`来保存图片链接到文件中。这是错误的。`write_text()`方法用于将文本数据写入文件,而不是将二进制数据保存为图片。
要正确保存爬取到的图片,请修改代码如下:
import pathlib
import requests
from pyquery import PyQuery
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0"
}
ooo = 1
for i in range(0, 226, 25):
response = requests.get(f"https://movie.douban.com/top250?start={i}&filter=", headers=headers)
a = response.content
py_qu = PyQuery(a)
aa = py_qu.find("img").items()
for pp in aa:
url = pp.attr("src")
if url.startswith("https://"):
image_data = requests.get(url).content
file_path = f"pic/{ooo}.webp"
with open(file_path, 'wb') as f:
f.write(image_data)
print(f"图片 {ooo}.webp 已保存!")
ooo += 1
在这个修改后的代码中,我们使用`requests.get()`下载图片并获取二进制数据。然后,通过创建文件路径`file_path`和打开文件的方式,将二进制数据写入文件。这样就能够正确保存图片并显示了。请尝试运行修改后的代码。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-2-17 18:53
你好,在代码中,你使用了`path_p.write_text(urls)`来保存图片链接到文件中。这是错误的。`write_text ...
import grequests
from pyquery import PyQuery
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0"
}
ooo = 1
for i in range(0,226,25):
ressss = grequests.get(f"https://movie.douban.com/top250?start={i}&filter=",headers=headers),
bbbb = grequests.map(ressss)
a = bbbb.content
py_qu = PyQuery(a)
aa = py_qu.find("img").items()
for pp in aa:
urls = pp.attr("src")
with open(f"pic/{ooo}.webp","wb") as file:
file.write(grequests.get(urls).content)
ooo = ooo + 1
报错如下: 'AsyncRequest' object has no attribute 'content' python小小白哟 发表于 2024-02-17 19:03
import grequests
from pyquery import PyQuery
h ...
在您提供的代码中,`bbbb`是一个包含`AsyncResponse`对象的列表,而不是直接包含响应内容。因此,您无法通过`bbbb.content`来获取响应的内容。要解决这个问题,可以修改代码如下:import grequestsfrom pyquery import PyQueryimport requestsheaders = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0"}ooo = 1for i in range(0, 226, 25): urls = f"https://movie.douban.com/top250?start={i}&filter=" ressss = grequests.get(urls, headers=headers) bbbb = grequests.map() a = bbbb.content py_qu = PyQuery(a) aa = py_qu.find("img").items() for pp in aa: img_url = pp.attr("src") response = requests.get(img_url) if response.status_code == 200: with open(f"pic/{ooo}.webp", "wb") as file: file.write(response.content) print(f"图片 {ooo}.webp 已保存!") ooo += 1在修改后的代码中,我们使用`requests.get()`方法直接发送请求并获取响应的内容。这样可以确保正确获取图片的二进制数据并保存到本地。请尝试运行修改后的代码。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-2-17 19:03
在您提供的代码中,`bbbb`是一个包含`AsyncResponse`对象的列表,而不是直接包含响应内容。因此,您无 ...
代码排下版 python小小白哟 发表于 2024-02-17 19:04
代码排下版
import grequests
from pyquery import PyQuery
import requests
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0"
}
ooo = 1
for i in range(0, 226, 25):
urls = f"https://movie.douban.com/top250?start={i}&filter="
ressss = grequests.get(urls, headers=headers)
bbbb = grequests.map(ressss)
a = bbbb.content
py_qu = PyQuery(a)
aa = py_qu.find("img").items()
for pp in aa:
img_url = pp.attr("src")
response = requests.get(img_url)
if response.status_code == 200:
with open(f"pic/{ooo}.webp", "wb") as file:
file.write(response.content)
print(f"图片 {ooo}.webp 已保存!")
ooo += 1
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-2-17 19:04
import grequests
from pyquery import PyQuery
import requests
我想用grequests爬取图片你这个代码使用但是requests获取图片的啊 python小小白哟 发表于 2024-02-17 19:06
我想用grequests爬取图片你这个代码使用但是request ...
非常抱歉,我在之前的回答中犯了一个错误。确实要使用grequests来获取图片,而不是使用requests。下面是修正后的代码:
import grequests
image_url = 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p480747492.webp'
save_path = 'image.jpg'
def save_image(response, *args, **kwargs):
with open(save_path, 'wb') as f:
f.write(response.content)
print(f"图片已保存到 {save_path}")
req = grequests.get(image_url, hooks=dict(response=save_image))
grequests.map()
上述代码会将指定的图片链接下载,并保存到本地的`image.jpg`文件中。注意,你可以根据自己的需求修改保存路径。在此代码中,我们定义了一个回调函数`save_image`,该函数会将响应内容保存到本地文件中。然后,我们利用`grequests.get()`创建一个请求对象,并将回调函数与请求对象进行绑定。最后,使用`grequests.map()`发送请求并等待响应。请求完成后,会自动触发回调函数保存图片到本地。
希望这次能满足你的需求!对于之前的错误回答,我再次表示歉意。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 import requests
with open("1.png", "wb") as f:
f.write(requests.get("你的链接").content)
直接用requests更简单 FishC 发表于 2024-2-17 19:04
import grequests
from pyquery import PyQuery
import requests
报错代码如下:
TypeError: 'AsyncRequest' object is not iterable python小小白哟 发表于 2024-02-17 19:15
报错代码如下:
TypeError: 'AsyncRequest' object i ...
抱歉,我之前的回答中有误导。grequests库返回的是异步请求对象,不能直接迭代。正确的做法是使用`grequests.send()`方法来发送请求并获取响应。
以下是修正后的代码:
import grequests
image_url = 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p480747492.webp'
def save_image(response, *args, **kwargs):
# 获取图片文件名
file_name = image_url.split('/')[-1]
# 保存图片到本地
with open(file_name, 'wb') as f:
f.write(response.content)
print(f"图片 {file_name} 已保存!")
# 创建请求对象
req = grequests.get(image_url, hooks=dict(response=save_image))
# 发送请求并等待响应
grequests.send(req)
请注意,这里只是针对单个图片链接的情况,如果要批量爬取多个图片,可以使用循环遍历的方式来处理。另外,为了提高效率,可以使用`grequests.map()`方法同时发送多个请求。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 歌者文明清理员 发表于 2024-2-17 19:14
直接用requests更简单
我就是想使用grequests实现一下
页:
[1]
2