【问题标题】:Python- web scraping, for loop in function doens't workPython-网络抓取,函数中的for循环不起作用
【发布时间】:2026-02-12 11:40:01
【问题描述】:

我正在研究 python-web scraping,我想制作一个函数自动抓取 webtoons 的速率。 我认为这是一项非常简单的工作,但是'score' 函数中的 for 循环不起作用。 但是我注释掉的最后三个 for 循环可以正常工作。 如何修复'score'功能???

import requests
from bs4 import BeautifulSoup

url = "https://comic.naver.com/webtoon/list?titleId=183559&weekday=mon"
res = requests.get(url)
res.raise_for_status()

soup = BeautifulSoup(res.text, "lxml")
# scraping rates
cartoons_1 = soup.find_all("div", attrs={"class":"rating_type"})
total_rates = 0
def score(cartoons):
    global total_rates
    for cartoon in cartoons:
        rate = cartoon.find("strong").get_text()
        print(rate)
        total_rates = total_rates + float(rate)
        return total_rates
total_rates = score(cartoons_1)
print("average rates: ", total_rates/len(cartoons_1))
# for cartoon in cartoons_1:
#     rate = cartoon.find("strong").get_text()
#     print(rate)

预期结果是 9.91 9.83 9.89 9.89 9.78 9.89 9.90 9.81 9.90 9.85 平均费率:9.865


但结果是 9.91 平均费率:0.991


函数中的 For 循环不起作用。

【问题讨论】:

  • 仅供参考,它是刮(刮,刮,刮)而不是刮。报废意味着像垃圾一样扔掉,或者打架。
  • 哈哈谢谢! python学习+英语学习

标签: python-3.x for-loop


【解决方案1】:

您定义了cartoons_1,但没有定义cartoons。我认为您正在尝试做的是:

import requests
from bs4 import BeautifulSoup

url = "https://comic.naver.com/webtoon/list?titleId=183559&weekday=mon"
res = requests.get(url)
res.raise_for_status()

soup = BeautifulSoup(res.text, "lxml")
# scrapping rates
cartoons_1 = soup.find_all("div", attrs={"class":"rating_type"})
total_rates = 0
def score(cartoons):
    global total_rates
    for cartoon in cartoons:
        rate = cartoon.find("strong").get_text()
        print(cartoon)
        print(rate)
        total_rates = total_rates + float(rate)
        return total_rates
total_rates = score(cartoons_1)
print("total rates: ", total_rates)
print("average rates: ", total_rates/len(cartoons_1))
for cartoon in cartoons_1:
    rate = cartoon.find("strong").get_text()
    print(rate)

【讨论】:

  • 我明白你的意思,我修复了下面的for循环,但我在函数内部找不到任何区别......
  • 你的意思是为什么函数中的循环不打印所有值?如果是这样,那是因为return total_rates 使其在到达该行时立即退出函数。
  • 我在一小时前添加了评论说谢谢,但它消失了。无论如何,非常感谢。有效!! :D