2017-06-29 78 views
-1

我正在尝试编写一个小型web请求程序来获得一些流行的Instagram用户(这是python 3)。Python URL TypeError:'str'对象不可调用

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); 

第一次迭代效果很好(和我能够得到第一页上的用户),但是在第二次迭代,我encounting以下错误:

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

尝试'url =“http://zymanga.com/millionplus/".join(idx)+”f“'; – PYA

回答

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 
+0

谢谢指出! –

5

您已在循环中重新定义str,以便它引用从响应中读取的变量。选择一个不同的名字。

+0

谢谢指出! –

3
str = f.read().decode('utf-8') 

str是您在上一次通过循环时读取的文件的内容。您试图将其称为str(idx),但它不是一个。

请勿为自己的变量使用内置函数的名称。

+0

谢谢指出! –