鱼C论坛

 找回密码
 立即注册
查看: 1544|回复: 21

[已解决]用selenium爬取王者荣耀图片

[复制链接]
发表于 2023-8-16 12:01:30 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 python小小白哟 于 2023-8-16 14:55 编辑
  1. from selenium import webdriver
  2. from selenium.webdriver.common.by import By
  3. import requests
  4. import time

  5. browser = webdriver.Edge()
  6. browser.get("https://pvp.qq.com/web201605/herolist.shtml")
  7. b = browser.find_elements(By.XPATH, "//html//body//div//div//div//div//div//ul//li//a//img")
  8. for x in b:
  9.     c = x.get_attribute("src")
  10.     a = requests.get(c)
  11.     dd = a.content
  12.     for i in range(1,116):
  13.         with open(f"{i}.jpg","wb") as file:
  14.             file.write(dd)
  15.             print("正在爬取中...")
  16. print("爬取成功!")
  17. time.sleep(10)
复制代码


    with open(f"/王者荣耀英雄图片/{i}.jpg","wb") as file:
FileNotFoundError: [Errno 2] No such file or directory: '/王者荣耀英雄图片/1.jpg'
为什么会报这个错误呢?


现在是逻辑错误了.
爬是能爬了
微信截图_20230816144953.jpg


最佳答案
2023-8-16 17:05:36
python小小白哟 发表于 2023-8-16 17:05
Traceback (most recent call last):
  File "E:\python\pythonProject\爬虫.py", line 133, in
    b ...
  1. from selenium import webdriver
  2. from selenium.webdriver.common.by import By
  3. import requests

  4. browser = webdriver.Edge()

  5. browser.get("https://pvp.qq.com/web201605/herolist.shtml")
  6. b = browser.find_elements(By.XPATH, "//html//body//div//div//div//div//div//ul//li//a//img")
  7. q = browser.find_elements(By.XPATH, "//html//body//div//div//div//div//div//ul//li//a")
  8. i = 1
  9. for x in b:
  10.     c = x.get_attribute("src")
  11.     print(c)
  12.     a = requests.get(c)
  13.     dd = a.content
  14.     bbc = q[i - 1].text
  15.     with open(f"王者荣耀英雄图片/{bbc}.jpg","wb") as file:
  16.         file.write(dd)
  17.         print("正在爬取中...")
  18.     i += 1
  19. print("爬取成功!")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-16 12:01:51 | 显示全部楼层
这个错误是因为指定的文件夹路径不存在。在代码中,你尝试将图片保存到一个名为"/王者荣耀英雄图片/"的文件夹中,但实际上该文件夹并不存在。

解决这个问题的方法是确保指定的文件夹存在。你可以使用Python的os模块来创建文件夹,如下所示:

  1. import os

  2. folder_path = "/王者荣耀英雄图片/"
  3. os.makedirs(folder_path, exist_ok=True)
复制代码


在这个例子中, os.makedirs() 函数将创建指定路径的文件夹。 exist_ok=True 参数将确保如果文件夹已经存在,不会引发错误。

将上述代码添加到你的程序中,确保文件夹存在后,你就不会再遇到"FileNotFoundError"错误了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-16 12:06:14 | 显示全部楼层
没有创建文件夹,所以 Python 就找不到路径,就无法写入了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-16 14:50:55 | 显示全部楼层
歌者文明清理员 发表于 2023-8-16 12:06
没有创建文件夹,所以 Python 就找不到路径,就无法写入了

你好,代码成功的运行了,但是爬取的都是同一张图片的不同名称,请问哪个地方逻辑错了呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-16 14:59:11 | 显示全部楼层
isdkz 发表于 2023-8-16 12:01
这个错误是因为指定的文件夹路径不存在。在代码中,你尝试将图片保存到一个名为"/王者荣耀英雄图片/"的文件 ...

你好,代码成功的运行了,但是爬取的都是同一张图片的不同名称,请问哪个地方逻辑错了呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-16 14:59:13 | 显示全部楼层
python小小白哟 发表于 2023-8-16 14:50
你好,代码成功的运行了,但是爬取的都是同一张图片的不同名称,请问哪个地方逻辑错了呢?
  1. from selenium.webdrvier import *
  2. import requests
  3. driver = Edge()
  4. elements = driver.get_elements(By.CSS_SELECTOR, ".herolist.clearfix img")
  5. i = 1
  6. for element in elements:
  7.     url = "https://pvp.qq.com" + element.get_attibute("src")
  8.     with open(f"/王者荣耀英雄图片/{i}.jpg", "wb" as f:
  9.         f.write(requests.get(url).content)
  10.     i += 1
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-16 15:02:10 | 显示全部楼层
python小小白哟 发表于 2023-8-16 14:50
你好,代码成功的运行了,但是爬取的都是同一张图片的不同名称,请问哪个地方逻辑错了呢?

第13行去掉,14-16行减少一个缩进,然后在设置变量i,你这是对一张图片写入了116次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-16 15:05:01 | 显示全部楼层
python小小白哟 发表于 2023-8-16 14:59
你好,代码成功的运行了,但是爬取的都是同一张图片的不同名称,请问哪个地方逻辑错了呢?
  1. from selenium import webdriver
  2. from selenium.webdriver.common.by import By
  3. import requests
  4. import time
  5. browser = webdriver.Edge()
  6. # print(1)
  7. browser.get("https://pvp.qq.com/web201605/herolist.shtml")
  8. b = browser.find_elements(By.XPATH, "//html//body//div//div//div//div//div//ul//li//a//img")
  9. i = 1
  10. for x in b:
  11.     c = x.get_attribute("src")
  12.     print(c)
  13.     a = requests.get(c)
  14.     dd = a.content
  15.     with open(f"{i}.jpg","wb") as file:
  16.         file.write(dd)
  17.         print("正在爬取中...")
  18.     i += 1
  19. print("爬取成功!")
  20. # time.sleep(10)
  21. print(b)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-16 15:12:39 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-16 15:19:38 | 显示全部楼层

我没抄,我自己写的,食不食油饼?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-16 15:31:50 | 显示全部楼层
学习编程中的Ben 发表于 2023-8-16 15:19
我没抄,我自己写的,食不食油饼?

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

使用道具 举报

发表于 2023-8-16 15:39:18 | 显示全部楼层

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

使用道具 举报

 楼主| 发表于 2023-8-16 16:59:24 | 显示全部楼层

你好,我想把这个爬下来的英雄名字作为文件名称使用,我的代码如下:请问该怎么改呢?

  1. from selenium import webdriver
  2. from selenium.webdriver.common.by import By
  3. import requests

  4. browser = webdriver.Edge()

  5. def get_name():
  6.     browser.get("https://pvp.qq.com/web201605/herolist.shtml")
  7.     a = browser.find_elements(By.XPATH, "//html//body//div//div//div//div//div//ul//li//a")
  8.     return a

  9. browser.get("https://pvp.qq.com/web201605/herolist.shtml")
  10. b = browser.find_elements(By.XPATH, "//html//body//div//div//div//div//div//ul//li//a//img")
  11. i = 1
  12. for x in b:
  13.     c = x.get_attribute("src")
  14.     print(c)
  15.     a = requests.get(c)
  16.     dd = a.content

  17.     asc = get_name()
  18.     for sss in asc:
  19.         bbc = sss.text
  20.     with open(f"王者荣耀英雄图片/{bbc}.jpg","wb") as file:
  21.         file.write(dd)
  22.         print("正在爬取中...")
  23.     i += 1
  24. print("爬取成功!")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-16 17:02:39 | 显示全部楼层
本帖最后由 学习编程中的Ben 于 2023-8-16 17:05 编辑
python小小白哟 发表于 2023-8-16 16:59
你好,我想把这个爬下来的英雄名字作为文件名称使用,我的代码如下:请问该怎么改呢?

  1. from selenium import webdriver
  2. from selenium.webdriver.common.by import By
  3. import requests

  4. browser = webdriver.Edge()

  5. browser.get("https://pvp.qq.com/web201605/herolist.shtml")
  6. b = browser.find_elements(By.XPATH, "//html//body//div//div//div//div//div//ul//li//a//img")
  7. q = browser.find_elements(By.XPATH, "//html//body//div//div//div//div//div//ul//li//a")
  8. i = 1
  9. for x in b:
  10.     c = x.get_attribute("src")
  11.     print(c)
  12.     a = requests.get(c)
  13.     dd = a.content
  14.     bbc = q[i - 1].txt
  15.     with open(f"王者荣耀英雄图片/{bbc}.jpg","wb") as file:
  16.         file.write(dd)
  17.         print("正在爬取中...")
  18.     i += 1
  19. print("爬取成功!")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-16 17:02:53 | 显示全部楼层
你先试试,我不确定可以哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-16 17:05:09 | 显示全部楼层
学习编程中的Ben 发表于 2023-8-16 17:02
你先试试,我不确定可以哈

Traceback (most recent call last):
  File "E:\python\pythonProject\爬虫.py", line 133, in <module>
    bbc = a[i - 1]
TypeError: 'Response' object is not subscriptable


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

使用道具 举报

发表于 2023-8-16 17:05:36 | 显示全部楼层    本楼为最佳答案   
python小小白哟 发表于 2023-8-16 17:05
Traceback (most recent call last):
  File "E:\python\pythonProject\爬虫.py", line 133, in
    b ...
  1. from selenium import webdriver
  2. from selenium.webdriver.common.by import By
  3. import requests

  4. browser = webdriver.Edge()

  5. browser.get("https://pvp.qq.com/web201605/herolist.shtml")
  6. b = browser.find_elements(By.XPATH, "//html//body//div//div//div//div//div//ul//li//a//img")
  7. q = browser.find_elements(By.XPATH, "//html//body//div//div//div//div//div//ul//li//a")
  8. i = 1
  9. for x in b:
  10.     c = x.get_attribute("src")
  11.     print(c)
  12.     a = requests.get(c)
  13.     dd = a.content
  14.     bbc = q[i - 1].text
  15.     with open(f"王者荣耀英雄图片/{bbc}.jpg","wb") as file:
  16.         file.write(dd)
  17.         print("正在爬取中...")
  18.     i += 1
  19. print("爬取成功!")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-16 17:06:49 | 显示全部楼层
因该可以了,别忘记给一个最佳答案啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-16 17:07:09 | 显示全部楼层

好的  感谢   我还是喜欢自己的代码  我再研究研究我自己的代码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-16 17:08:34 | 显示全部楼层
python小小白哟 发表于 2023-8-16 17:07
好的  感谢   我还是喜欢自己的代码  我再研究研究我自己的代码。

你的代码是有很大的问题的,我那样改已经是最接近你的代码得了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 19:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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