我花了一段时间来理解 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 键传递给文件来调用我的抓取内容(在本例中为打印)
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 函数来检查密钥是否存在,如果然后......等等......我将如何处理这个?