Неверный URI для использования URL? в модуле запросов Python - PullRequest
0 голосов
/ 17 июня 2019

Я пытался извлечь данные, используя:

urlall = url+'/'+i+'.json'+'\\?'+'page='+str(page)

r = requests.get(urlall)

I got an error 400 Client Error: Invalid URI for url: the '\?' turned out to be '%5C?' 

если я использую:

urlall = url+'/'+i+'.json'+'?'+'page='+str(page)

Then I got another error: can only concatenate str (not "_io.TextIOWrapper") to str

Как мне установить '?' в виде строки и получить только '?' в URL вместо% 5C?

1 Ответ

2 голосов
/ 17 июня 2019

Вы можете использовать форматирование строки для создания результирующего URL ( string.format или f-strings )

In [4]: url = 'http.example.com'                                                                                                          
In [5]: i = 1                                                                                                                             
In [8]: page = 1                                                                                                                          
#f-strings for python>=3.6
In [10]: f'{url}/{i}.json?page={page}'                                                                                                    
Out[10]: 'http.example.com/1.json?page=1'
#String formatting
In [11]: '{}/{}.json?page={}'.format(url, i, page)                                                                                        
Out[11]: 'http.example.com/1.json?page=1'

Или вы можете использовать urllib.parse.urlunsplit библиотеку для создания вашего URL, например

In [1]: from urllib.parse import urlunsplit                                                                                               

In [2]: urlunsplit(['http','example.com','1.json','page=1',''])                                                                           
Out[2]: 'http://example.com/1.json?page=1'
...