类型错误:无法使用python将list对象解释为范围内的整数

2024-09-27 21:32:02 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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)   

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

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

这就是我想做的。如果我算了“상품명" 介于“먼저 둘러보세요“和”오늘의 상품이에요“,结果是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:“列表”对象不能解释为整数


Tags: to代码in文本gtforhtmlrange
1条回答
网友
1楼 · 发布于 2024-09-27 21:32:02

当您应该传入一个int时,您正在将一个列表传入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]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](或者老实说,这对range()来说是否重要),但如果是这样的话,我包含了if/else语句来处理这个问题

相关问题 更多 >

    热门问题