Python循环遍历URL中的变量

时间:2018-05-08 07:41:01

标签: json python-3.x pandas loops url

我想在这里做的是,我想在每个网址的网址中更改用户ID,然后从网址获取输出。

到目前为止我做了什么:

import urllib
import requests
import json

url="https://api.abc.com/users/12345?api_key=5632lkjgdlg&_format=_show"

data=requests.get(url).json()
print (data['user'])

(我在打印内输入'user',因为它以json格式提供有关焦点用户的所有信息)

我的问题是我想通过给出另一个数字(任意随机数)来更改用户ID(在此url示例中为12345),然后从我输入的每个URL中获取输出。例如,更改为5211,例如,并获得结果。然后更改为959444并获得结果,依此类推。我想我需要使用循环通过更改URL中的数字来进行迭代,但由于难以拆分原始URL然后仅更改内部的用户ID号而无法执行此操作。任何人都可以帮我吗? 非常感谢你提前。

=====================下一个问题如下:================

感谢您之前的回答!我尝试根据答案更多地构建我的代码并制作它但遇到了另一个问题。我可以迭代并以json格式获取每个用户的信息。格式给了我一个单引号(而不是双引号)和json格式的每个键前面的一个奇怪的u'符号,但我可以解决这个问题。无论如何,我清理了json格式,并以完美的整齐json格式制作。 我的计划是将每个json转换为csv文件,但是希望将所有json的scrape堆叠到一个csv文件中。例如,user1上的第一个json格式将转换为csv文件,user1将被视为row1,json中的所有键将成为列名,所有相应的值将是相应列的值。我刮的第二个json格式将转换为相同的csv文件,但在第二行,依此类推。

from pandas.io.json import json_normalize
eg_data=[data['user']]
df=pd.DataFrame.from_dict(json_normalize(data['user']))
print (df)

df.to_csv('C:/Users/todd/Downloads/eg.csv')
print (df)

所以,我发现json_normalize使嵌套括号变平,因此它在现实世界的例子中很有用。另外,我尝试使用pandas dataframe将其作为表格。这里我有两个问题:1。如何在一个csv文件中依次堆叠每个json格式? (如果还有其他方法可以在不使用pandas框架的情况下执行此操作,那么也会受到赞赏)2。据我所知,除非每行具有相同的列数,否则pandas数据帧不会为您提供输出。但在我的情况下,因为我所刮的每个json格式都有10列或20列,具体取决于json格式是否具有嵌套括号。在这种情况下,如何堆叠所有行并将其放在一个csv文件中? 评论或问题将不胜感激。

1 个答案:

答案 0 :(得分:0)

您最初可以将其拆分为两个,并在每次生成随机数时将它们连接在一起

import random

url1="https://api.abc.com/users/"
url2="?api_key=5632lkjgdlg&_format=_show"

for i in range(4): 
    num=random.randint(1000,10000) #you can change the range here for generating a random number
    url=url1+str(num)+url2
    print(url)

输出

https://api.abc.com/users/2079?api_key=5632lkjgdlg&_format=_show
https://api.abc.com/users/2472?api_key=5632lkjgdlg&_format=_show
and so on...

但是,如果您希望在确切位置拆分而不知道预先看起来如何,则可以使用regex,因为您确定找到了?在这个号码之后。

import re
url="https://api.abc.com/users/12345?api_key=5632lkjgdlg&_format=_show"
matches=re.split('\d+(?=\?)',url)
['https://api.abc.com/users/', '?api_key=5632lkjgdlg&_format=_show']

现在只需设置

url1=matches[0]
url2=matches[1]

并使用for循环。