Python Loop через переменную в URL - PullRequest
0 голосов
/ 08 мая 2018

Что я хочу сделать здесь, так это то, что я хочу изменить идентификатор пользователя в URL для каждого URL, а затем получить выходные данные из URL.

Что я сделал до сих пор:

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)

Мой вопрос заключается в том, что я хочу изменить идентификатор пользователя (в данном примере URL-адреса 12345), указав другое число (любое случайное число), а затем получить выходные данные от каждого набираемого URL-адреса. Например, измените значение на 5211, например и получить результат. А затем измените на 959444 и получите результат и так далее. Я думаю, что мне нужно использовать цикл, чтобы сделать это итерацией, просто изменив числа в URL, но не смог сделать это из-за трудности разделения исходного URL, а затем изменил только номер идентификатора пользователя внутри. Кто-нибудь может мне помочь? Огромное спасибо заранее.

===================== Следующий следующий вопрос задан ниже ================

Спасибо за ваш предыдущий ответ! Я попытался построить свои коды больше на основе ответа и сделал это, но столкнулся с другой проблемой. Я мог бы перебирать и получать информацию о каждом пользователе в формате json. Формат дал мне одну кавычку (а не двойные кавычки) и странные нотации перед всеми клавишами в формате json, но я мог решить эту проблему. В любом случае, я очистил формат json и сделал его в идеальном аккуратном формате json. Мой план состоит в том, чтобы преобразовать каждый json в файл csv, но я хочу собрать все json, которые я собираю, в один файл csv. Например, первый формат json для user1 будет преобразован в файл 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, чтобы сделать его в виде таблицы. Здесь у меня есть 2 вопроса: 1. Как мне сложить каждый формат json, который я собрал один за другим в один CSV-файл? (Если есть другой способ сделать это без использования фрейма pandas, это также приветствуется) 2. Как я знаю, фрейм данных pandas не выдаст вам вывод, если в каждой строке не будет одинаковое количество столбцов. Но в моем случае, так как каждый формат json, который я выбрал, имеет 10 или 20 столбцов, в зависимости от того, имеют ли json-формат вложенные скобки или нет. В этом случае, как мне сложить все строки и сделать это в одном CSV-файле? Комментарии или вопросы будут с благодарностью.

1 Ответ

0 голосов
/ 08 мая 2018

Вы можете изначально разбить его на две части и соединять их вместе каждый раз, когда вы генерируете случайное число

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)

OUTPUT

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...