我正在尝试编写一个小型的Web请求程序来获取一些流行的Instagram用户(这是python 3)。
final_list = [];
for idx in range(1, 5, 1):
url = "http://zymanga.com/millionplus/" + str(idx) + "f"; # idx is for page number
print(url);
headers = {...omitted header details...};
req = urllib.request.Request(url, None, headers);
with urllib.request.urlopen(req) as f:
str = f.read().decode('utf-8');
initial_list = re.findall(r'target=\"_blank\">([^<]+?)</a>,', str);
for item in initial_list:
final_list.append(item);
第一次迭代运行良好(并且我能够在第一页上获得用户),但是在第二次迭代中,我正在编写以下错误:
Traceback (most recent call last):
File ".\web_search.py", line 8, in <module>
url = "http://zymanga.com/millionplus/" + str(idx) + "f";
TypeError: 'str' object is not callable
请您告诉我可能导致问题的原因,尝试调试但无法解决问题。谢谢!
答案 0 :(得分:5)
您已在循环中重新定义str
,以便它引用从响应中读取的变量。选择其他名称。
答案 1 :(得分:3)
str = f.read().decode('utf-8')
str
是您在上一次循环中读取的文件的内容。您试图将其称为str(idx)
的函数,但它不是一个。
不要为自己的变量使用内置函数的名称。
答案 2 :(得分:1)
您在str
使用str = f.read().decode('utf-8');
作为变量。在下一个循环中,str(idx)
不再是类str
,而是来自f.read().decode('utf-8')
的值。
绝不要将类类型用作变量名。只是为了说明错误:
>>> str
<class 'str'>
>>> str(1)
'1'
>>> str = 'some string'
>>> str
'some string'
>>> str(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object is not callable