python小小白哟 发表于 2023-8-16 12:01:30

用selenium爬取王者荣耀图片

本帖最后由 python小小白哟 于 2023-8-16 14:55 编辑

from selenium import webdriver
from selenium.webdriver.common.by import By
import requests
import time

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

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


现在是逻辑错误了.
爬是能爬了



isdkz 发表于 2023-8-16 12:01:51

这个错误是因为指定的文件夹路径不存在。在代码中,你尝试将图片保存到一个名为"/王者荣耀英雄图片/"的文件夹中,但实际上该文件夹并不存在。

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

import os

folder_path = "/王者荣耀英雄图片/"
os.makedirs(folder_path, exist_ok=True)


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

将上述代码添加到你的程序中,确保文件夹存在后,你就不会再遇到"FileNotFoundError"错误了。

歌者文明清理员 发表于 2023-8-16 12:06:14

没有创建文件夹,所以 Python 就找不到路径,就无法写入了

python小小白哟 发表于 2023-8-16 14:50:55

歌者文明清理员 发表于 2023-8-16 12:06
没有创建文件夹,所以 Python 就找不到路径,就无法写入了

你好,代码成功的运行了,但是爬取的都是同一张图片的不同名称,请问哪个地方逻辑错了呢?

python小小白哟 发表于 2023-8-16 14:59:11

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

你好,代码成功的运行了,但是爬取的都是同一张图片的不同名称,请问哪个地方逻辑错了呢?

歌者文明清理员 发表于 2023-8-16 14:59:13

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

from selenium.webdrvier import *
import requests
driver = Edge()
elements = driver.get_elements(By.CSS_SELECTOR, ".herolist.clearfix img")
i = 1
for element in elements:
    url = "https://pvp.qq.com" + element.get_attibute("src")
    with open(f"/王者荣耀英雄图片/{i}.jpg", "wb" as f:
      f.write(requests.get(url).content)
    i += 1

歌者文明清理员 发表于 2023-8-16 15:02:10

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

第13行去掉,14-16行减少一个缩进,然后在设置变量i,你这是对一张图片写入了116次

学习编程中的Ben 发表于 2023-8-16 15:05:01

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

from selenium import webdriver
from selenium.webdriver.common.by import By
import requests
import time
browser = webdriver.Edge()
# print(1)
browser.get("https://pvp.qq.com/web201605/herolist.shtml")
b = browser.find_elements(By.XPATH, "//html//body//div//div//div//div//div//ul//li//a//img")
i = 1
for x in b:
    c = x.get_attribute("src")
    print(c)
    a = requests.get(c)
    dd = a.content
    with open(f"{i}.jpg","wb") as file:
      file.write(dd)
      print("正在爬取中...")
    i += 1
print("爬取成功!")
# time.sleep(10)
print(b)

歌者文明清理员 发表于 2023-8-16 15:12:39

学习编程中的Ben 发表于 2023-8-16 15:05


抄作业可耻

学习编程中的Ben 发表于 2023-8-16 15:19:38

歌者文明清理员 发表于 2023-8-16 15:12
抄作业可耻

我没抄,我自己写的,食不食油饼?

歌者文明清理员 发表于 2023-8-16 15:31:50

学习编程中的Ben 发表于 2023-8-16 15:19
我没抄,我自己写的,食不食油饼?

对不起,看错了

学习编程中的Ben 发表于 2023-8-16 15:39:18

歌者文明清理员 发表于 2023-8-16 15:31
对不起,看错了

没关系{:10_282:}

python小小白哟 发表于 2023-8-16 16:59:24

学习编程中的Ben 发表于 2023-8-16 15:39
没关系

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

from selenium import webdriver
from selenium.webdriver.common.by import By
import requests

browser = webdriver.Edge()

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

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

    asc = get_name()
    for sss in asc:
      bbc = sss.text
    with open(f"王者荣耀英雄图片/{bbc}.jpg","wb") as file:
      file.write(dd)
      print("正在爬取中...")
    i += 1
print("爬取成功!")

学习编程中的Ben 发表于 2023-8-16 17:02:39

本帖最后由 学习编程中的Ben 于 2023-8-16 17:05 编辑

python小小白哟 发表于 2023-8-16 16:59
你好,我想把这个爬下来的英雄名字作为文件名称使用,我的代码如下:请问该怎么改呢?

from selenium import webdriver
from selenium.webdriver.common.by import By
import requests

browser = webdriver.Edge()

browser.get("https://pvp.qq.com/web201605/herolist.shtml")
b = browser.find_elements(By.XPATH, "//html//body//div//div//div//div//div//ul//li//a//img")
q = browser.find_elements(By.XPATH, "//html//body//div//div//div//div//div//ul//li//a")
i = 1
for x in b:
    c = x.get_attribute("src")
    print(c)
    a = requests.get(c)
    dd = a.content
    bbc = q.txt
    with open(f"王者荣耀英雄图片/{bbc}.jpg","wb") as file:
      file.write(dd)
      print("正在爬取中...")
    i += 1
print("爬取成功!")

学习编程中的Ben 发表于 2023-8-16 17:02:53

你先试试,我不确定可以哈

python小小白哟 发表于 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
TypeError: 'Response' object is not subscriptable


报这个错误

学习编程中的Ben 发表于 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 ...

from selenium import webdriver
from selenium.webdriver.common.by import By
import requests

browser = webdriver.Edge()

browser.get("https://pvp.qq.com/web201605/herolist.shtml")
b = browser.find_elements(By.XPATH, "//html//body//div//div//div//div//div//ul//li//a//img")
q = browser.find_elements(By.XPATH, "//html//body//div//div//div//div//div//ul//li//a")
i = 1
for x in b:
    c = x.get_attribute("src")
    print(c)
    a = requests.get(c)
    dd = a.content
    bbc = q.text
    with open(f"王者荣耀英雄图片/{bbc}.jpg","wb") as file:
      file.write(dd)
      print("正在爬取中...")
    i += 1
print("爬取成功!")

学习编程中的Ben 发表于 2023-8-16 17:06:49

因该可以了,别忘记给一个最佳答案啊

python小小白哟 发表于 2023-8-16 17:07:09

学习编程中的Ben 发表于 2023-8-16 17:05


好的感谢   我还是喜欢自己的代码我再研究研究我自己的代码。

学习编程中的Ben 发表于 2023-8-16 17:08:34

python小小白哟 发表于 2023-8-16 17:07
好的感谢   我还是喜欢自己的代码我再研究研究我自己的代码。

你的代码是有很大的问题的,我那样改已经是最接近你的代码得了
页: [1] 2
查看完整版本: 用selenium爬取王者荣耀图片