2013-12-16 95 views
0

这是我的代码来访问一个网页,但我需要添加参数: 1.通过从文件 读取一行添加第一个参数2.第二个参数是一个计数器,以连续访问页面在python中添加url参数

import urllib2 
import json,os 

f = open('codes','r') 
for line in f.readlines(): 
    id = line.strip('\n') 
    url = 'http://api.opencorporates.com/v0.2/companies/search?q=&jurisdiction_code=%s&per_page=26&current_status=Active&page=%d' 
    i = 0 
    directory = id 
    os.makedirs(directory) 
    while True: 
     i += 5 
     req = urllib2.Request('%s%s%d' % (url,id, i)) 
     print req 
     try: 
      response = urllib2.urlopen('%s%s%d' % (url, id, i)) 
     except urllib2.HTTPError, e: 
      break 
     content = response.read() 
     fo = str(i) + '.json'  
     OUTFILE = os.path.join(directory, fo) 
     with open(OUTFILE, 'w') as f: 
      f.write(content) 

这不断创建空目录。我知道URL参数有问题。如何纠正这一点?

+0

我认为你的问题是在你的'Request'调用中。在我头顶,字符串格式看起来不对。把你要求的网址放入一个变量中并打印出来,看看它的样子。 – willy

+0

这就是它正在打印的内容:http://api.opencorporates.com/v0.2/companies/search?q=&jurisdiction_code=%s&per_page=26¤t_status=Active&page=%dae_az5 在最后附加参数。 – blackmamba

+0

然后,我会添加一个答案,我确切地看到问题是什么。 – willy

回答

0

您需要更改这些位:

'%s%s%d' % (url,id, i) 

要这样:

url % (id, i) 

你现在正在做的是创建一个字符串像'<url><id><i>'而不是字符串的替代。

+0

它的工作原理。非常感谢。 – blackmamba

2

看起来你想要做的是插入idiurl,但字符串格式化你使用此串接urlidi。尝试修改此:

req = urllib2.Request('%s%s%d' % (url,id, i)) 

进入这个:

req = urllib2.Request(url % (id, i)) 

这是否给你你想要的结果?

此外,您使用的字符串格式化语法已弃用;目前首选的语法详见PEP 3101 -- Advanced String Formatting。所以,更好的是做:

url = 'http://api.opencorporates.com/v0.2/companies/search?q=&jurisdiction_code={0}&per_page=26&current_status=Active&page={1}' 
... 
req = urllib2.Request(url.format(id, i)) 

代替%s%d您使用大括号({})作为占位符的参数。花括号内,你可以把一个元组指标:

>>> 'I like to {0}, {0}, {0}, {1} and {2}'.format('eat', 'apples', 'bananas') 
'I like to eat, eat, eat, apples and bananas' 

如果你只是使用纯粹的大括号,每一个占位符消耗一个参数,和额外被忽略;例如: -

>>> '{} and {} and {}'.format(1, 2, 3) 
'1 and 2 and 3' 
>>> '{} and {} and {}'.format(1, 2, 3, 4) 
'1 and 2 and 3' 
>>> '{} and {} and {}'.format(1, 2) 

Traceback (most recent call last): 
    File "<pyshell#18>", line 1, in <module> 
    '{} and {} and {}'.format(1, 2) 
IndexError: tuple index out of range 

您也可以使用关键字参数,因此字典拆包:

>>> d = {'adj':'funky', 'noun':'cheese', 'pronoun':'him'} 
>>> 'The {adj} {noun} intrigued {pronoun}.'.format(**d) 
'The funky cheese intrigued him.' 

有更多的功能,在PEP详细,如果你有兴趣。

+0

非常感谢。我将用新格式替换它。 – blackmamba