鱼C论坛

 找回密码
 立即注册
查看: 686|回复: 7

[已解决]如何让保存到本地的图片大小一样

[复制链接]
发表于 2023-8-17 18:59:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
爬取王者荣耀的图片是保存到本地,图片大小不统一,如何让保存到本地的图片分辨率一样展示同样大小

  1. import requests
  2. from pyquery import PyQuery
  3. from bs4 import BeautifulSoup
  4. import os
  5. from selenium import webdriver
  6. from time import sleep
  7. driver = webdriver.Chrome()
  8. driver.get("https://pvp.qq.com/web201605/herolist.shtml")
  9. sleep(1) # 等待js加载
  10. source = driver.page_source
  11. driver.close()

  12. #html = requests.get("https://pvp.qq.com/web201605/herolist.shtml").content
  13. doc = PyQuery(source)

  14. #print(doc)
  15. items = doc('.herolist > li').items()
  16. href_datas = {}
  17. for item in items:
  18.     url = item.find('img').attr('src')
  19.     urls = 'https:' + url

  20.     name = item.find('a').text()
  21.     href = item.find('a').attr('href')
  22.     # href_lists.append(href)
  23.     href_datas[name] = "https://pvp.qq.com/web201605/" + href
  24.    
  25.     # os.path.exists(path) 判断文件是否存在 固定语法
  26.     path = f"E:/Pythonfile/王者荣耀英雄图片"
  27.     isexists = os.path.exists(path)
  28.     if not isexists:
  29.         os.makedirs(path)
  30.     url_content = requests.get(urls).content
  31.     print(f"正在爬取{name}图片中...",urls)
  32.     with open("./王者荣耀英雄图片/" + name + '.jpg','wb') as file:
  33.         file.write(url_content)
  34.    
  35. for name,pf_url in href_datas.items():
  36.     print(name,pf_url)
  37.     driver = webdriver.Chrome()
  38.     driver.get(pf_url)
  39.     sleep(1)  # 等待js加载
  40.     pf_html = driver.page_source
  41.     driver.close()
  42.     # html = requests.get(url).content
  43.     doc = PyQuery(pf_html)

  44.     pf_items = doc('.pic-pf-list.pic-pf-list3>li').items()
  45.     for pf_item in pf_items:
  46.         pf_url = pf_item.find('img').attr('src')
  47.         pf_urls = 'https:' + pf_url
  48.         #print(pf_urls)
  49.         pf_name = pf_item.find('p').text()
  50.         url_content = requests.get(pf_urls).content
  51.         print(f"正在爬取{name}_{pf_name}皮肤图片中...", pf_urls)
  52.         # os.path.exists(path) 判断文件是否存在 固定语法
  53.         pf_path = f"E:/Pythonfile/王者荣耀皮肤图片"
  54.         isexists = os.path.exists(pf_path)
  55.         if not isexists:
  56.             os.makedirs(pf_path)
  57.         with open("./王者荣耀皮肤图片/" + name + '_' + pf_name + '.jpg', 'wb') as file:
  58.             file.write(url_content)
复制代码
最佳答案
2023-8-18 15:26:52
淡淡凉 发表于 2023-8-18 15:16
前面的几张图片可以正常保存,后面的报错了OSError: cannot write mode RGBA as JPEG

这个试试:
  1. import requests
  2. from pyquery import PyQuery
  3. from bs4 import BeautifulSoup
  4. import os
  5. from selenium import webdriver
  6. from time import sleep
  7. from PIL import Image

  8. # 启动浏览器
  9. driver = webdriver.Chrome()
  10. driver.get("https://pvp.qq.com/web201605/herolist.shtml")
  11. sleep(1) # 等待js加载
  12. source = driver.page_source
  13. driver.close()

  14. # 解析英雄列表页面
  15. doc = PyQuery(source)
  16. items = doc('.herolist > li').items()
  17. href_datas = {}
  18. for item in items:
  19.     url = item.find('img').attr('src')
  20.     urls = 'https:' + url

  21.     name = item.find('a').text()
  22.     href = item.find('a').attr('href')
  23.     href_datas[name] = "https://pvp.qq.com/web201605/" + href

  24. # 遍历英雄,爬取皮肤图片
  25. for name, pf_url in href_datas.items():
  26.     print(name, pf_url)
  27.     driver = webdriver.Chrome()
  28.     driver.get(pf_url)
  29.     sleep(1)  # 等待js加载
  30.     pf_html = driver.page_source
  31.     driver.close()
  32.    
  33.     # 解析英雄详情页面
  34.     doc = PyQuery(pf_html)
  35.     pf_items = doc('.pic-pf-list.pic-pf-list3>li').items()

  36.     for pf_item in pf_items:
  37.         pf_url = pf_item.find('img').attr('src')
  38.         pf_urls = 'https:' + pf_url
  39.         pf_name = pf_item.find('p').text()
  40.         url_content = requests.get(pf_urls).content
  41.         print(f"正在爬取{name}_{pf_name}皮肤图片中...", pf_urls)
  42.       
  43.         # 创建保存路径
  44.         pf_path = f"E:/Pythonfile/王者荣耀皮肤图片"
  45.         isexists = os.path.exists(pf_path)
  46.         if not isexists:
  47.             os.makedirs(pf_path)
  48.         
  49.         # 保存图片
  50.         with open(f"{pf_path}/{name}_{pf_name}.jpg", 'wb') as file:
  51.             file.write(url_content)

  52.         # 打开图片并调整大小
  53.         img = Image.open(f"{pf_path}/{name}_{pf_name}.jpg")
  54.         img = img.convert("RGB")  # 转换为RGB模式
  55.         img = img.resize((500, 500))  # 设置统一的图片大小,修改为你想要的大小
  56.         img.save(f"{pf_path}/{name}_{pf_name}.jpg")
复制代码

保存到本地时如何保存为67 × 69 px大小

保存到本地时如何保存为67 × 69 px大小
1692268901737.jpg

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-17 19:00:17 | 显示全部楼层
在保存到本地的图片上,如果想要它们的分辨率和大小都一样,可以使用PIL库进行处理。以下是修改后的代码:

  1. import requests
  2. from pyquery import PyQuery
  3. from bs4 import BeautifulSoup
  4. import os
  5. from selenium import webdriver
  6. from time import sleep
  7. from PIL import Image

  8. driver = webdriver.Chrome()
  9. driver.get("https://pvp.qq.com/web201605/herolist.shtml")
  10. sleep(1) # 等待js加载
  11. source = driver.page_source
  12. driver.close()

  13. doc = PyQuery(source)

  14. items = doc('.herolist > li').items()
  15. href_datas = {}
  16. for item in items:
  17.     url = item.find('img').attr('src')
  18.     urls = 'https:' + url

  19.     name = item.find('a').text()
  20.     href = item.find('a').attr('href')
  21.     href_datas[name] = "https://pvp.qq.com/web201605/" + href

  22.     path = f"E:/Pythonfile/王者荣耀英雄图片"
  23.     isexists = os.path.exists(path)
  24.     if not isexists:
  25.         os.makedirs(path)
  26.     url_content = requests.get(urls).content
  27.     print(f"正在爬取{name}图片中...",urls)
  28.     with open("./王者荣耀英雄图片/" + name + '.jpg','wb') as file:
  29.         file.write(url_content)
  30.         # 打开图片
  31.         img = Image.open(file.name)
  32.         # 统一图片大小
  33.         img = img.resize((800, 600))
  34.         # 保存修改后的图片
  35.         img.save(file.name)

  36. for name,pf_url in href_datas.items():
  37.     print(name,pf_url)
  38.     driver = webdriver.Chrome()
  39.     driver.get(pf_url)
  40.     sleep(1)  # 等待js加载
  41.     pf_html = driver.page_source
  42.     driver.close()

  43.     doc = PyQuery(pf_html)

  44.     pf_items = doc('.pic-pf-list.pic-pf-list3>li').items()
  45.     for pf_item in pf_items:
  46.         pf_url = pf_item.find('img').attr('src')
  47.         pf_urls = 'https:' + pf_url

  48.         pf_name = pf_item.find('p').text()
  49.         url_content = requests.get(pf_urls).content
  50.         print(f"正在爬取{name}_{pf_name}皮肤图片中...", pf_urls)

  51.         pf_path = f"E:/Pythonfile/王者荣耀皮肤图片"
  52.         isexists = os.path.exists(pf_path)
  53.         if not isexists:
  54.             os.makedirs(pf_path)
  55.         with open("./王者荣耀皮肤图片/" + name + '_' + pf_name + '.jpg', 'wb') as file:
  56.             file.write(url_content)
  57.             # 打开图片
  58.             img = Image.open(file.name)
  59.             # 统一图片大小
  60.             img = img.resize((800, 600))
  61.             # 保存修改后的图片
  62.             img.save(file.name)
复制代码


在这个修改后的代码中,我们使用了PIL库的Image模块来打开、修改和保存图片。通过调用 resize 方法,我们将图片的大小统一设置为了800x600。这样,保存到本地的图片就会展示出同样的大小。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-17 19:00:48 | 显示全部楼层
要使保存到本地的图片分辨率一样,可以使用PIL库来处理图片。以下是修改后的完整代码:
  1. import requests
  2. from pyquery import PyQuery
  3. from bs4 import BeautifulSoup
  4. import os
  5. from selenium import webdriver
  6. from time import sleep
  7. from PIL import Image
  8. driver = webdriver.Chrome()
  9. driver.get("https://pvp.qq.com/web201605/herolist.shtml")
  10. sleep(1)  # 等待js加载
  11. source = driver.page_source
  12. driver.close()
  13. doc = PyQuery(source)
  14. items = doc('.herolist > li').items()
  15. href_datas = {}
  16. for item in items:
  17.     url = item.find('img').attr('src')
  18.     urls = 'https:' + url
  19.     name = item.find('a').text()
  20.     href = item.find('a').attr('href')
  21.     href_datas[name] = "https://pvp.qq.com/web201605/" + href
  22. path = f"E:/Pythonfile/王者荣耀英雄图片"
  23. isexists = os.path.exists(path)
  24. if not isexists:
  25.     os.makedirs(path)
  26. for name, pf_url in href_datas.items():
  27.     print(name, pf_url)
  28.     driver = webdriver.Chrome()
  29.     driver.get(pf_url)
  30.     sleep(1)  # 等待js加载
  31.     pf_html = driver.page_source
  32.     driver.close()
  33.     doc = PyQuery(pf_html)
  34.     pf_items = doc('.pic-pf-list.pic-pf-list3>li').items()
  35.     for pf_item in pf_items:
  36.         pf_url = pf_item.find('img').attr('src')
  37.         pf_urls = 'https:' + pf_url
  38.         pf_name = pf_item.find('p').text()
  39.         url_content = requests.get(pf_urls).content
  40.         print(f"正在爬取{name}_{pf_name}皮肤图片中...", pf_urls)
  41.         pf_path = f"E:/Pythonfile/王者荣耀皮肤图片"
  42.         isexists = os.path.exists(pf_path)
  43.         if not isexists:
  44.             os.makedirs(pf_path)
  45.         with open("./王者荣耀皮肤图片/" + name + '_' + pf_name + '.jpg', 'wb') as file:
  46.             file.write(url_content)
  47.         # 打开图片并调整大小
  48.         img = Image.open("./王者荣耀皮肤图片/" + name + '_' + pf_name + '.jpg')
  49.         img = img.resize((500, 500))  # 设置统一的图片大小,修改为你想要的大小
  50.         img.save("./王者荣耀皮肤图片/" + name + '_' + pf_name + '.jpg')
复制代码

在上述代码中,使用了PIL库的Image类来打开图片,并使用resize()方法将图片调整为统一的大小(这里设置为500x500像素)。然后使用save()方法保存修改后的图片。

请确保已经安装了PIL库,可以使用以下命令来安装:
[/code]
pip install pillow
[/code]

希望能帮助到您!如果有任何其他问题,请随时提问。

如果回答对你有帮助,请给我一个最佳答案!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-17 19:00:54 | 显示全部楼层
要让保存到本地的图片分辨率相同,你可以在保存图片之前对其进行统一的处理。可以使用第三方库PIL(Python Imaging Library)来实现图片的处理和调整分辨率。

下面是对代码的修改,在保存图片之前添加了调整分辨率的步骤:

  1. import requests
  2. from pyquery import PyQuery
  3. from bs4 import BeautifulSoup
  4. import os
  5. from selenium import webdriver
  6. from PIL import Image

  7. # 省略部分代码...

  8. for name, pf_url in href_datas.items():
  9.     print(name, pf_url)
  10.     driver = webdriver.Chrome()
  11.     driver.get(pf_url)
  12.     sleep(1)  # 等待js加载
  13.     pf_html = driver.page_source
  14.     driver.quit()

  15.     doc = PyQuery(pf_html)
  16.     pf_items = doc('.pic-pf-list.pic-pf-list3>li').items()

  17.     for pf_item in pf_items:
  18.         pf_url = pf_item.find('img').attr('src')
  19.         pf_urls = 'https:' + pf_url
  20.         # print(pf_urls)
  21.         pf_name = pf_item.find('p').text()
  22.         url_content = requests.get(pf_urls).content
  23.         print(f"正在爬取{name}_{pf_name}皮肤图片中...", pf_urls)

  24.         # 调整分辨率为统一大小
  25.         image = Image.open(BytesIO(url_content))
  26.         image = image.resize((500, 500))  # 设置统一的图片尺寸,这里假设设置为500x500
  27.         url_content = image.tobytes()

  28.         # os.path.exists(path) 判断文件是否存在 固定语法
  29.         pf_path = f"E:/Pythonfile/王者荣耀皮肤图片"
  30.         isexists = os.path.exists(pf_path)
  31.         if not isexists:
  32.             os.makedirs(pf_path)

  33.         with open("./王者荣耀皮肤图片/" + name + '_' + pf_name + '.jpg', 'wb') as file:
  34.             file.write(url_content)
复制代码


在以上代码中,使用PIL库的Image.open()方法打开图片,并使用resize()方法调整尺寸为统一大小(这里假设设置为500x500),然后将图片转换为字节流,最后保存到本地。

需要注意的是,在使用该代码之前,请确保已经安装了Pillow库(PIL的fork版本)通过pip install pillow进行安装。

希望这能帮到你!如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-18 14:27:50 | 显示全部楼层
isdkz 发表于 2023-8-17 19:00
在保存到本地的图片上,如果想要它们的分辨率和大小都一样,可以使用PIL库进行处理。以下是修改后的代码:
...
  1. import requests
  2. from pyquery import PyQuery
  3. from bs4 import BeautifulSoup
  4. import os
  5. from selenium import webdriver
  6. from time import sleep
  7. from PIL import Image

  8. driver = webdriver.Chrome()
  9. driver.get("https://pvp.qq.com/web201605/herolist.shtml")
  10. sleep(1) # 等待js加载
  11. source = driver.page_source
  12. driver.close()

  13. #html = requests.get("https://pvp.qq.com/web201605/herolist.shtml").content
  14. doc = PyQuery(source)

  15. #print(doc)
  16. items = doc('.herolist > li').items()
  17. href_datas = {}
  18. for item in items:
  19.     url = item.find('img').attr('src')
  20.     urls = 'https:' + url

  21.     name = item.find('a').text()
  22.     href = item.find('a').attr('href')
  23.     # href_lists.append(href)
  24.     href_datas[name] = "https://pvp.qq.com/web201605/" + href
  25.     '''
  26.     # os.path.exists(path) 判断文件是否存在 固定语法
  27.     path = f"E:/Pythonfile/王者荣耀英雄图片"
  28.     isexists = os.path.exists(path)
  29.     if not isexists:
  30.         os.makedirs(path)
  31.     url_content = requests.get(urls).content
  32.     print(f"正在爬取{name}图片中...",urls)
  33.     with open("./王者荣耀英雄图片/" + name + '.jpg','wb') as file:
  34.         file.write(url_content)
  35.     '''
  36. for name,pf_url in href_datas.items():
  37.     print(name,pf_url)
  38.     driver = webdriver.Chrome()
  39.     driver.get(pf_url)
  40.     sleep(1)  # 等待js加载
  41.     pf_html = driver.page_source
  42.     driver.close()
  43.     # html = requests.get(url).content
  44.     doc = PyQuery(pf_html)

  45.     pf_items = doc('.pic-pf-list.pic-pf-list3>li').items()

  46.     for pf_item in pf_items:
  47.         pf_url = pf_item.find('img').attr('src')
  48.         pf_urls = 'https:' + pf_url
  49.         #print(pf_urls)
  50.         pf_name = pf_item.find('p').text()
  51.         url_content = requests.get(pf_urls).content
  52.         print(f"正在爬取{name}_{pf_name}皮肤图片中...", pf_urls)

  53.         # 调整分辨率为统一大小
  54.         image = Image.open(BytesIO(url_content))
  55.         image = image.resize((500, 500))  # 设置统一的图片尺寸,这里假设设置为500x500
  56.         url_content = image.tobytes()

  57.         # os.path.exists(path) 判断文件是否存在 固定语法
  58.         pf_path = f"E:/Pythonfile/王者荣耀皮肤图片"
  59.         isexists = os.path.exists(pf_path)
  60.         if not isexists:
  61.             os.makedirs(pf_path)
  62.         with open("./王者荣耀皮肤图片/" + name + '_' + pf_name + '.jpg', 'wb') as file:
  63.             file.write(url_content)

  64.             # 打开图片
  65.             img = Image.open(file.name)
  66.             # 统一图片大小
  67.             img = img.resize((800, 600))
  68.             # 保存修改后的图片
  69.             img.save(file.name)
复制代码
D:\python39\python.exe E:/Pythonfile/herolist.py
亚连 https://pvp.qq.com/web201605/herodetail/514.shtml
正在爬取亚连_追忆之刃皮肤图片中... https://game.gtimg.cn/images/yxzj/img201606/heroimg/514/514-smallskin-1.jpg
Traceback (most recent call last):
  File "E:\Pythonfile\herolist.py", line 76, in <module>
    img = Image.open(file.name)
  File "D:\python39\lib\site-packages\PIL\Image.py", line 3023, in open
    raise UnidentifiedImageError(
PIL.UnidentifiedImageError: cannot identify image file './王者荣耀皮肤图片/亚连_追忆之刃.jpg'



报错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-18 15:16:47 | 显示全部楼层
学习编程中的Ben 发表于 2023-8-17 19:00
要使保存到本地的图片分辨率一样,可以使用PIL库来处理图片。以下是修改后的完整代码:
  1. import requests
  2. from pyquery import PyQuery
  3. from bs4 import BeautifulSoup
  4. import os
  5. from selenium import webdriver
  6. from time import sleep
  7. from PIL import Image

  8. driver = webdriver.Chrome()
  9. driver.get("https://pvp.qq.com/web201605/herolist.shtml")
  10. sleep(1) # 等待js加载
  11. source = driver.page_source
  12. driver.close()

  13. #html = requests.get("https://pvp.qq.com/web201605/herolist.shtml").content
  14. doc = PyQuery(source)

  15. #print(doc)
  16. items = doc('.herolist > li').items()
  17. href_datas = {}
  18. for item in items:
  19.     url = item.find('img').attr('src')
  20.     urls = 'https:' + url

  21.     name = item.find('a').text()
  22.     href = item.find('a').attr('href')
  23.     # href_lists.append(href)
  24.     href_datas[name] = "https://pvp.qq.com/web201605/" + href
  25.     '''
  26.     # os.path.exists(path) 判断文件是否存在 固定语法
  27.     path = f"E:/Pythonfile/王者荣耀英雄图片"
  28.     isexists = os.path.exists(path)
  29.     if not isexists:
  30.         os.makedirs(path)
  31.     url_content = requests.get(urls).content
  32.     print(f"正在爬取{name}图片中...",urls)
  33.     with open("./王者荣耀英雄图片/" + name + '.jpg','wb') as file:
  34.         file.write(url_content)
  35.     '''
  36. for name,pf_url in href_datas.items():
  37.     print(name,pf_url)
  38.     driver = webdriver.Chrome()
  39.     driver.get(pf_url)
  40.     sleep(1)  # 等待js加载
  41.     pf_html = driver.page_source
  42.     driver.close()
  43.     # html = requests.get(url).content
  44.     doc = PyQuery(pf_html)

  45.     pf_items = doc('.pic-pf-list.pic-pf-list3>li').items()

  46.     for pf_item in pf_items:
  47.         pf_url = pf_item.find('img').attr('src')
  48.         pf_urls = 'https:' + pf_url
  49.         #print(pf_urls)
  50.         pf_name = pf_item.find('p').text()
  51.         url_content = requests.get(pf_urls).content
  52.         print(f"正在爬取{name}_{pf_name}皮肤图片中...", pf_urls)
  53.       
  54.         # os.path.exists(path) 判断文件是否存在 固定语法
  55.         pf_path = f"E:/Pythonfile/王者荣耀皮肤图片"
  56.         isexists = os.path.exists(pf_path)
  57.         if not isexists:
  58.             os.makedirs(pf_path)
  59.         with open("./王者荣耀皮肤图片/" + name + '_' + pf_name + '.jpg', 'wb') as file:
  60.             file.write(url_content)

  61.         # 打开图片并调整大小
  62.         img = Image.open(f"{pf_path}/" + name + '_' + pf_name + '.jpg')
  63.         img = img.resize((500, 500))  # 设置统一的图片大小,修改为你想要的大小
  64.         img.save(f"{pf_path}/" + name + '_' + pf_name + '.jpg')
复制代码
D:\python39\python.exe E:/Pythonfile/herolist.py
亚连 https://pvp.qq.com/web201605/herodetail/514.shtml
正在爬取亚连_追忆之刃皮肤图片中... https://game.gtimg.cn/images/yxzj/img201606/heroimg/514/514-smallskin-1.jpg
姬小满 https://pvp.qq.com/web201605/herodetail/564.shtml
正在爬取姬小满_武道奇才皮肤图片中... https://game.gtimg.cn/images/yxzj/img201606/heroimg/564/564-smallskin-1.jpg
正在爬取姬小满_零食大作战皮肤图片中... https://game.gtimg.cn/images/yxzj/img201606/heroimg/564/564-smallskin-2.jpg
Traceback (most recent call last):
  File "D:\python39\lib\site-packages\PIL\JpegImagePlugin.py", line 639, in _save
    rawmode = RAWMODE[im.mode]
KeyError: 'RGBA'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "E:\Pythonfile\herolist.py", line 78, in <module>
    img = Image.open(f"{pf_path}/" + name + '_' + pf_name + '.jpg')
  File "D:\python39\lib\site-packages\PIL\Image.py", line 2413, in save
    save_handler(self, fp, filename)
  File "D:\python39\lib\site-packages\PIL\JpegImagePlugin.py", line 642, in _save
    raise OSError(msg) from e
OSError: cannot write mode RGBA as JPEG


前面的几张图片可以正常保存,后面的报错了OSError: cannot write mode RGBA as JPEG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-18 15:26:52 | 显示全部楼层    本楼为最佳答案   
淡淡凉 发表于 2023-8-18 15:16
前面的几张图片可以正常保存,后面的报错了OSError: cannot write mode RGBA as JPEG

这个试试:
  1. import requests
  2. from pyquery import PyQuery
  3. from bs4 import BeautifulSoup
  4. import os
  5. from selenium import webdriver
  6. from time import sleep
  7. from PIL import Image

  8. # 启动浏览器
  9. driver = webdriver.Chrome()
  10. driver.get("https://pvp.qq.com/web201605/herolist.shtml")
  11. sleep(1) # 等待js加载
  12. source = driver.page_source
  13. driver.close()

  14. # 解析英雄列表页面
  15. doc = PyQuery(source)
  16. items = doc('.herolist > li').items()
  17. href_datas = {}
  18. for item in items:
  19.     url = item.find('img').attr('src')
  20.     urls = 'https:' + url

  21.     name = item.find('a').text()
  22.     href = item.find('a').attr('href')
  23.     href_datas[name] = "https://pvp.qq.com/web201605/" + href

  24. # 遍历英雄,爬取皮肤图片
  25. for name, pf_url in href_datas.items():
  26.     print(name, pf_url)
  27.     driver = webdriver.Chrome()
  28.     driver.get(pf_url)
  29.     sleep(1)  # 等待js加载
  30.     pf_html = driver.page_source
  31.     driver.close()
  32.    
  33.     # 解析英雄详情页面
  34.     doc = PyQuery(pf_html)
  35.     pf_items = doc('.pic-pf-list.pic-pf-list3>li').items()

  36.     for pf_item in pf_items:
  37.         pf_url = pf_item.find('img').attr('src')
  38.         pf_urls = 'https:' + pf_url
  39.         pf_name = pf_item.find('p').text()
  40.         url_content = requests.get(pf_urls).content
  41.         print(f"正在爬取{name}_{pf_name}皮肤图片中...", pf_urls)
  42.       
  43.         # 创建保存路径
  44.         pf_path = f"E:/Pythonfile/王者荣耀皮肤图片"
  45.         isexists = os.path.exists(pf_path)
  46.         if not isexists:
  47.             os.makedirs(pf_path)
  48.         
  49.         # 保存图片
  50.         with open(f"{pf_path}/{name}_{pf_name}.jpg", 'wb') as file:
  51.             file.write(url_content)

  52.         # 打开图片并调整大小
  53.         img = Image.open(f"{pf_path}/{name}_{pf_name}.jpg")
  54.         img = img.convert("RGB")  # 转换为RGB模式
  55.         img = img.resize((500, 500))  # 设置统一的图片大小,修改为你想要的大小
  56.         img.save(f"{pf_path}/{name}_{pf_name}.jpg")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-18 16:59:10 | 显示全部楼层
淡淡凉 发表于 2023-8-18 15:16
前面的几张图片可以正常保存,后面的报错了OSError: cannot write mode RGBA as JPEG

百度了一下,用convert方法把RGBA转化成RGB就可以了
# 打开图片并调整大小
img = Image.open(f"{pf_path}/" + name + '_' + pf_name + '.jpg')
img = img.convert('RGB')
img = img.resize((500, 500))  # 设置统一的图片大小,修改为你想要的大小
img.save(f"{pf_path}/" + name + '_' + pf_name + '.jpg')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 11:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表