zyx2012 发表于 5 天前

模块问题


为了做我的游戏, 方便起见上网上用requests来获取一下
代码:

static/image/hrline/line4.png
import requests
from bs4 import BeautifulSoup

def get_pokemon_info():
    url = 'https://wiki.52poke.com/wiki/%E5%AE%9D%E5%8F%AF%E6%A2%A6%E5%88%97%E8%A1%A8%EF%BC%88%E6%8C%89%E5%85%B3%E9%83%BD%E5%9B%BE%E9%89%B4%E7%BC%96%E5%8F%B7%EF%BC%89'
    response = requests.get(url)
    soup = BeautifulSoup(response.content, 'html.parser')

    # 找到宝可梦列表的表格
    pokemon_table = soup.find('table', {'class': 'sortable'})

    # 解析表格中的每一行数据
    pokemon_rows = pokemon_table.find_all('tr')
    pokemon_data = {}

    for row in pokemon_rows:# 跳过标题行
      cells = row.find_all('td')
      if not cells:
            continue

      # 获取宝可梦的编号、名字、属性、HP、攻击、防御、速度等信息
      num = cells.text.strip()
      name = cells.text.strip()
      types = .find_all('a')]
      hp = int(cells.text.strip())
      attack = int(cells.text.strip())
      defense = int(cells.text.strip())
      speed = int(cells.text.strip())

      # 存储宝可梦数据
      pokemon_data = {
            '名字': name,
            '属性': types,
            'HP': hp,
            '攻击': attack,
            '防御': defense,
            '速度': speed
      }

    return pokemon_data

# 调用函数并打印结果
pokemon_info = get_pokemon_info()
for num, info in pokemon_info.items():
    print(f"{num}: {info}")

错误:
Traceback (most recent call last):
File "D:/Python projects/3项目/读取2.py", line 1, in <module>
    import requests
File "C:\Users\33090\AppData\Roaming\Python\Python312\site-packages\requests\__init__.py", line 64, in <module>
    from . import utils
File "C:\Users\33090\AppData\Roaming\Python\Python312\site-packages\requests\utils.py", line 29, in <module>
    from .structures import CaseInsensitiveDict
File "C:\Users\33090\AppData\Roaming\Python\Python312\site-packages\requests\structures.py", line 16, in <module>
    class CaseInsensitiveDict(collections.MutableMapping):
AttributeError: module 'collections' has no attribute 'MutableMapping'
把requests里的cookies.py的
class RequestsCookieJar(cookielib.CookieJar, collections.MutableMapping):

改成了
class RequestsCookieJar(cookielib.CookieJar, collections.abc.MutableMapping):

依然不好使
求助{:5_96:} {:5_96:} {:5_96:}

FishC 发表于 5 天前

从错误信息来看,问题源于 `collections` 模块的 `MutableMapping`。在Python 3.3及以上版本中,`collections.MutableMapping` 已经被移动到 `collections.abc.MutableMapping` 中。

你提到已经修改了 `cookies.py` 文件中的 `MutableMapping` 导入,但问题仍然存在。这可能意味着你的修改没有被保存或没有应用到你的Python环境中。以下是解决这个问题的步骤:


[*] 确保你已经正确保存了修改过的 `cookies.py` 文件。
[*] 可以尝试卸载并重新安装 `requests` 库。
[*] 如果问题依旧,可以考虑升级你的 Python 和相关库到最新版本,因为较新的版本很可能已经解决了这个问题。


对于代码中的解析部分,还有几点需要修正:

1. 解析数据时应该使用 `strip()` 列表单元格的文本内容。
2. 列表推导式中缺少中括号。

以下是修正过的代码示例:


import requests
from bs4 import BeautifulSoup

def get_pokemon_info():
    url = 'https://wiki.52poke.com/wiki/%E5%AE%9D%E5%8F%AF%E6%A2%A6%E5%88%97%E8%A1%A8%EF%BC%88%E6%8C%89%E5%85%B3%E9%83%BD%E5%9B%BE%E9%89%B4%E7%BC%96%E5%8F%B7%EF%BC%89'
    response = requests.get(url)
    soup = BeautifulSoup(response.content, 'html.parser')

    # 找到宝可梦列表的表格
    pokemon_table = soup.find('table', {'class': 'sortable'})

    # 解析表格中的每一行数据
    pokemon_rows = pokemon_table.find_all('tr')
    pokemon_data = {}

    for row in pokemon_rows:# 跳过标题行
      cells = row.find_all('td')
      if not cells:
            continue

      # 获取宝可梦的编号、名字、属性、HP、攻击、防御、速度等信息
      num = cells.text.strip()
      name = cells.text.strip()
      types = .find_all('a')]
      hp = int(cells.text.strip())
      attack = int(cells.text.strip())
      defense = int(cells.text.strip())
      speed = int(cells.text.strip())

      # 存储宝可梦数据
      pokemon_data = {
            '名字': name,
            '属性': types,
            'HP': hp,
            '攻击': attack,
            '防御': defense,
            '速度': speed
      }

    return pokemon_data

# 调用函数并打印结果
pokemon_info = get_pokemon_info()
for num, info in pokemon_info.items():
    print(f"{num}: {info}")


这些修改应该能修复你的代码中的问题。希望这对你有帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

zyx2012 发表于 4 天前

FishC 发表于 2025-1-18 18:06
从错误信息来看,问题源于 `collections` 模块的 `MutableMapping`。在Python 3.3及以上版本中,`collectio ...

不好使{:5_96:}

FishC 发表于 4 天前

zyx2012 发表于 2025-01-19 07:27
FishC 发表于 2025-1-18 18:06
从错误信息来看,问题 ...

下面是具体解决方法,请按照步骤操作,确保问题可以彻底解决。

1. 修改代码中的 `collections.MutableMapping` 导入问题
这个问题通常是由 `requests` 库版本较低导致的,你可以升级到最新版本解决。运行以下命令来升级:


pip install --upgrade requests


如果升级后问题依然存在,请确认你的 `requests` 库相关代码已被正确修改。打开以下路径中的文件并确保修改正确:

C:\Users\33090\AppData\Roaming\Python\Python312\site-packages\requests\cookies.py


将其中出现的 `collections.MutableMapping` 替换为 `collections.abc.MutableMapping`,具体如下:

class RequestsCookieJar(cookielib.CookieJar, collections.abc.MutableMapping):


**保存修改后重新运行代码。**

2. 针对网络数据解析部分的修正
你贴出的代码中解析网页内容的逻辑也存在一些问题,比如 `cells` 的多次取值和类型转换问题。以下是修正后的完整代码,请替换掉原有代码并运行:


import requests
from bs4 import BeautifulSoup

def get_pokemon_info():
    url = 'https://wiki.52poke.com/wiki/%E5%AE%9D%E5%8F%AF%E6%A2%A6%E5%88%97%E8%A1%A8%EF%BC%88%E6%8C%89%E5%85%B3%E9%83%BD%E5%9B%BE%E9%89%B4%E7%BC%96%E5%8F%B7%EF%BC%89'
    response = requests.get(url)
    soup = BeautifulSoup(response.content, 'html.parser')

    # 找到宝可梦列表的表格
    pokemon_table = soup.find('table', {'class': 'sortable'})

    # 如果没有找到表格,抛出错误提示
    if pokemon_table is None:
      raise ValueError("未找到目标表格,请检查URL或页面结构是否更改")

    # 解析表格中的每一行数据
    pokemon_rows = pokemon_table.find_all('tr')
    pokemon_data = {}

    for row in pokemon_rows:
      cells = row.find_all('td')
      if not cells:# 跳过标题行
            continue

      # 获取宝可梦的编号、名字等信息
      num = cells.text.strip()# 编号
      name = cells.text.strip()# 名字
      types = .find_all('a')]# 属性

      # 存储宝可梦数据
      pokemon_data = {
            '名字': name,
            '属性': types,
      }

    return pokemon_data

# 调用函数并打印结果
pokemon_info = get_pokemon_info()
for num, info in pokemon_info.items():
    print(f"{num}: {info}")


3. 如果问题依然存在
最后,如果问题还没有解决,尝试以下步骤:

[*] 确保已安装最新版的 `requests` 和 `beautifulsoup4`,运行以下命令:

pip install --upgrade requests beautifulsoup4


[*] 确保你运行代码的 Python 版本为 3.10 或以上。使用以下命令检查 Python 版本:

python --version



尝试以上方法后,再重新运行代码。如果还有问题请告知,我会进一步协助你。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 模块问题