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