Scrapinghub: обработка ошибок Dict_key | проверьте, существует ли ключ

Мне потребовалось некоторое время, чтобы разобраться в логике python-scrapinghubs и в том, как она взаимодействует с Scrapinghubs API, но если я достиг прогресса в моем текущем устранении неполадок...

Используя Scrapy, я перечислил несколько веб-скребков, единственной функцией которых является создание списка воспроизведения m3u. На различных веб-сайтах для видеохостинга я вычеркиваю заголовок, URL-адрес потока видео-источника, и, если веб-сайт, в частности, подвергается очистке, запрашивает его, а также категории, которые развертываются в scrapinghub.

При развертывании в scrapinghub каждый веб-сайт, который я создал, находился в своей папке проектов, и среди проектов есть и другие проекты Scrapy (соответствующая информация).

Используя ScrapinghubClient, я сначала перебираю проекты, чтобы получить все ключи заданий:

from hubstorage import HubstorageClient
from scrapinghub import ScrapinghubClient, Connection

hc = HubstorageClient(auth='APIKEY')
client = ScrapinghubClient('APIKEY')
print(client)
ls = client.projects.list()

for j in ls:
    project = client.get_project(j)
    jobs_metadata = project.jobs.list()
#....

ТОГДА я использую цикл for, чтобы получить каждый проект job.key

...
    for j in jobs_metadata:
        print(j['key'])
        key = j['key']
        job = project.jobs.get(j['key'])
        print(job) 

Затем я вызываю мой очищенный контент, передавая соответствующий ключ dict для записи в файл (в этом случае print)

for item in job.items.iter():
    print('#EXTINF:0, ' + str(item['title']) + '\n' + str(item['vidsrc']) + '\n')

Вот где начинается проблема, мне нужно иметь возможность обрабатывать ошибки, когда вызываемый элемент не существует в словаре, мне нужно иметь возможность два, а затем передать повторяющийся словарь... на данный момент из данного фрагмента кода, словарь не содержит значения ключа, тогда, очевидно, он просто останавливается...

 print('#EXTINF:0, ' + str(item['title']) + '\n' + str(item['vidsrc']) + '\n')
KeyError: 'title'

Process finished with exit code 1

Я тогда должен быть в состоянии пройти? или используйте функцию none, чтобы проверить, существует ли ключ, если тогда... и т.д... Как бы я справился с этим?

1 ответ

ПОНЯЛ! С помощью метода try и исключением /pass я могу перебрать все диктонары, чтобы "передать" созданный экземпляр, если присутствует keyerror

    for item in job.items.iter():
        try:
            i = item['title']
            print('#EXTINF:0, ' + str(item['title']) + '\n' + str(item['vidsrc']) + '\n')
        except KeyError:
            pass
Другие вопросы по тегам