我花了一些时间来理解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
那时我需要能够通过吗?或使用无功能检查密钥是否存在,如果那么......等等......我将如何处理这个问题?
答案 0 :(得分:0)
GOT IT!通过使用try和except / pass方法,我可以遍历所有的dictonaries到"传递"如果出现keyerror则实例化的dict
for item in job.items.iter():
try:
i = item['title']
print('#EXTINF:0, ' + str(item['title']) + '\n' + str(item['vidsrc']) + '\n')
except KeyError:
pass