0

我花了一段时间来理解 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 函数来检查密钥是否存在,如果然后......等等......我将如何处理这个?

4

1 回答 1

0

知道了!通过使用 try 和 except/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
于 2017-04-18T03:18:29.297 回答