python - 类型错误:list' 对象不能用 python 解释为 in range 的整数
问题描述
我正在编写一个代码来计算两个文本之间的特定文本。这是我写的代码。当我 print(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)
结果>>> [아이템카드둘러보세요광고파워클릭클릭클릭클릭클릭클릭클릭클릭,남성지갑,가죽,지갑,................................................ ]
我检查了两个文本作为粗体标记。和特定的文本作为斜体标记。每次都会改变整个句子。
这就是我想做的。如果在“먼저 둘러보세요”之间计数“상품명” 和“오늘의 상품이에요”,结果为 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:“列表”对象不能解释为整数
解决方案
当您应该传递一个 int 时,您正在将一个列表传递给 range()。Zerg_fi
并且Zerg_to
在上面的代码中都是 1 项列表;要编写等效于 的代码range(11,19)
,您需要编写代码range(Zerg_fi[0], Zerg_to[0])
注意:如果你传入Len(Zerg_fi)
,你将传入一个值 1,而不是 11。
最后一个 for 循环让我感到困惑,但根据您的评论,如果您尝试检查是否zerg.count('상품명')
等于Zerg_fi[0]
and之间的值,我认为这可能是解决方案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()
.
推荐阅读
- c++ - 如何使用 C++ 将 ISO-2022-KR 编码转换为 UTF-8 编码?
- apache-kafka - kafka 卡在 num.stream.threads 和 max.poll.record
- cassandra - 无法使用 COPY FROM 将数据加载到 Amazon 键空间
- node.js - 上传图片调用API上传手机
- laravel - 如何在laravel中使用id重定向
- continuous-integration - Gitlab CI如何使用规则语法忽略目录?
- python - 使用python在excel中拆分字母数字字符
- sql - 如何获取列和最大值列
- racket - 有没有更简单的方法来编写调用格式
- python - pygame image background does not match main background