类型错误:列表对象不能被解释为一个整数,python for in range

我正在编写代码来计算两个文本之间的特定文本。这是我写的代码。当我打印(zerg)时,结果如下。为了解释,我简化了结果。

wb4 = load_workbook(Gmarket_keyword_file)
ws4 = wb4.active

last_row4 = ws4.max_row

for gs in range(2,last_row4 + 1):
    query = quote(str(ws4.cell(row=gs,column=4).value))
    url = 'https://browse.gmarket.co.kr/search?keyword=' + query
    html = urllib.request.urlopen(url).read()
    soup = BeautifulSoup(html,'html.parser')

    zerg = [kr.get_text() for kr in soup.find_all(class_='box__component')] 
    print(zerg)   

结果>>> [아이템카드먼저둘러보세요광고파워클릭73230클럽상품명남자지갑,남성지갑,가죽,지갑상품명여성,......아이템카드골든벨상품명럭셔리,아이템카드오늘의상품 이에요광고플러스]

我检查了两个文本作为粗体标记。和特定文本作为斜体标记。整个句子每次都会改变。

这就是我想做的。如果在“먼저 둘러보세요”和“오늘의 상품이에요”之间计算“상품명”,结果是3。

为了解决这个问题,我以为我需要知道“먼저 둘러보세요”、“오늘의 상품이에요”的索引,但是这些文本没有以列表的形式区分。所以我编码如下。

    fi = '먼저'
    zerg_fi = [sp for sp in range(len(zerg)) if fi in zerg[sp]]
    print(zerg_fi)

结果>> [11]

    to = '오늘의'
    zerg_to = [tdp for tdp in range(len(zerg)) if to in zerg[tdp]]
    print(zerg_to)

结果>> [19]

于是,我试着数了一下'상품명'的文字,代码如下。

    for zc in range(zerg_fi,zerg_to):
        if zerg.count('상품명') < 5:
            print('수정불필요')

但我发现了一条错误消息。如何更改代码以解决此错误?

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\82103\anaconda3\envs\untitled\lib\tkinter\__init__.py",line 1883,in __call__
return self.func(*args)
File "C:/Users/82103/PycharmProjects/untitled/scraping program/1_crawling practice.py",line 587,in btncmd2
for zc in range(zerg_fi,zerg_to):

TypeError: 'list' 对象不能被解释为整数

xukelongjinhong 回答:类型错误:列表对象不能被解释为一个整数,python for in range

当您应该传入一个整数时,您正在将一个列表传入 range()。上面代码中的Zerg_fiZerg_to都是1项列表;要编写等效于 range(11,19) 的代码,您需要编写 range(Zerg_fi[0],Zerg_to[0])

注意:如果您传入 Len(Zerg_fi),则传入的值是 1,而不是 11。

最后一个 for 循环让我感到困惑,但根据您的评论,如果您试图检查 zerg.count('상품명') 是否等于 Zerg_fi[0] 和 {{ 之间的值,我认为这可能是解决方案1}}:

Zerg_to[0]

我不确定 # test values zerg_fi = [11] zerg_to = [19] zerg = [] # check which is lower zerg_fi or zerg_to if zerg_fi[0] < zerg_to[0]: for x in range(zerg_fi[0],zerg_to[0]): if zerg.count('상품명') == x: result = 3 else: # result != 3 pass elif zerg_to[0] < zerg_to[0]: for x in range(zerg_to[0],zerg_fi[0]): if zerg.count('상품명') == x: result = 3 else: # result != 3 pass # 'else' will execute if zerg_fi[0]==zerg_to[0] else: x = zerg_fi[0] if zerg.count('상품명') == x: # result = 3 ? .... not sure if you want this pass else: # result != 3 ? ... not sure if you want this 是否会小于 Zerg_to[0](或者老实说这对 Zerg_fi[0] 是否重要),但如果确实如此,我将 if/ else 语句来处理。

本文链接:https://www.f2er.com/12080.html

大家都在问