Применить функцию к словарю в Python - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть функция ELIF, чтобы определить, существует ли веб-сайт. Элиф работает, но невероятно медленно. Я хотел бы создать словарь, чтобы применить функцию ELIF к списку URL-адресов, которые у меня есть. В идеале я хочу получить выходные данные в новую таблицу, в которой перечислены URL-адрес и результат функции.

Я создаю словарь для потенциальных выходных данных, описанных в выражении elif, размещенном ниже

check = {401:'web site exists, permission needed', 404:'web site does not exist'}





for row in df['sp_online']:
    r = requests.head(row)
    if r.status_code == 401:
        print ('web site exists, permission needed')
    elif r.status_code == 404:
        print('web site does  not exist')
else:
        print('other')

Как получить результаты функции подтверждения, чтобы отобразить результат каждого URL-адреса в виде нового столбца в кадре данных?

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

Я думаю, вам следует попробовать потоковый или многопроцессорный подход. Вместо того, чтобы запрашивать один сайт за раз, вы можете объединить n сайтов и ждать их ответов. С ThreadPool вы можете достичь этого с помощью нескольких дополнительных строк. Надеюсь, что это полезно для вас!

import requests
from multiprocessing.pool import ThreadPool

list_sites = ['https://www.wikipedia.org/', 'https://youtube.com', 'https://my-site-that-does-not-exist.com.does.not']

def get_site_status(site):
    try:
        response = requests.get(site)
    except requests.exceptions.ConnectionError:
        print("Connection refused")
        return 1
    if response.status_code == 401:
        print('web site exists, permission needed')
    elif response.status_code == 404:
        print('web site does  not exist')
    else:
        print('other')
    return 0

pool = ThreadPool(processes=1)

results = pool.map_async(get_site_status, list_sites)

print('Results: {}'.format(results.get()))
0 голосов
/ 30 сентября 2019

Я думаю, что вы ищете Series.map

df = pd.DataFrame({'status': [401, 404, 500]})
check = {401:'web site exists, permission needed', 404:'web site does not exist'}
print(df['status'].map(check))

отпечатков

0    web site exists, permission needed
1               web site does not exist
2                                   NaN
Name: status, dtype: object

Назначить новый столбец обычным способом

df['new_col'] = df['status'].map(check)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...