Python TypeError:列表索引必须是整数或片,而不是在抓取JSON数据时出现的str错误
我试着用scrapy刮取JSON数据。我在抓取JSON数据时出错: 更新: 前6个值工作正常。其他值不打印任何内容。如果我使用这些值,其他值也打印不适用。这些值存在,但不返回任何内容 导致错误的表达式如下所示: “网站”:价值[“来源”][“代理营销中心”][“0”][“网站”] “Facebook”: 值[''u source']['AgentMarketingCenter']['0']['Facebook\u URL'] “LinkedIn”: 值[''u source']['AgentMarketingCenter']['0']['LinkedIn\u URL'] “Twitter”:值[''u source']['AgentMarketingCenter']['0']['Twitter'] “BIO”:值[''来源]['AgentMarketingCenter']['0']['BIO']Python TypeError:列表索引必须是整数或片,而不是在抓取JSON数据时出现的str错误,python,json,web-scraping,scrapy,Python,Json,Web Scraping,Scrapy,我试着用scrapy刮取JSON数据。我在抓取JSON数据时出错: 更新: 前6个值工作正常。其他值不打印任何内容。如果我使用这些值,其他值也打印不适用。这些值存在,但不返回任何内容 导致错误的表达式如下所示: “网站”:价值[“来源”][“代理营销中心”][“0”][“网站”] “Facebook”: 值[''u source']['AgentMarketingCenter']['0']['Facebook\u URL'] “LinkedIn”: 值[''u source']['AgentMa
您想要收集的信息并不适用于所有dict,因此您需要使用带有默认值的
get
方法来避免出现错误
项目={
“全名”:值[“源”][“全名”],
“Primary Phonenumber”:值[''源]['primaryPhone'],
“电子邮件”:值[''来源]['primaryEmail'],
“城市”:值[''来源]['agentPrimaryLocation'][0]['City'],
“状态”:值[''源]['agentPrimaryLocation'][0]。获取('stateName','NA'),
“Zip”:值[''源]['agentPrimaryLocation'][0]['zipcode'],
“网站”:值[''u source']['AgentMarketingCenter'][0]。获取('Website','NA'),
“Facebook”:值[''U source']['AgentMarketingCenter'][0]。获取('Facebook\U URL','NA'),
“LinkedIn”:值[''U source']['AgentMarketingCenter'][0]。获取('LinkedIn'U URL','NA'),
“Twitter”:值[''u source']['AgentMarketingCenter'][0]。获取('Twitter','NA'),
“BIO”:值[''来源]['AgentMarketingCenter'][0]。获取('BIO','NA'),
}
试着不要在列表索引(零)周围加引号@S.Strempfer我试过了,但没用。TypeError:“builtin\u function\u或\u method”对象不是Subscriptables,这似乎是另一个错误。它在哪一行?@S.Strempfer第72行,在解析“City”:value.get[''u source']['agentPrimaryLocation'][0]['City'],TypeError:'builtin\u function\u或\u method'对象不可订阅为什么要放。放在那里?它不在前面的线路上!我知道有一个更简单的方法,我已经回答了这个问题的后续问题,事实上我们在这里发布了一些关于这个问题的交流。我使用了一个try/except块,它可能不是最有效或最简洁的。
import scrapy
import json
class MainSpider(scrapy.Spider):
name = 'main'
start_urls = ['https://experts.expcloud.com/api4/std?searchterms=AB&size=216&from=0']
def parse(self, response):
resp = json.loads(response.body)
values = resp['hits']['hits']
for value in values:
try:
yield {
'Full Name': value['_source']['fullName'],
'Primary Phonenumber':value['_source']['primaryPhone'],
"Email": value['_source']['primaryEmail'],
"City": value['_source']['agentPrimaryLocation'][0]['city'],
"State": value['_source']['agentPrimaryLocation'][0]['state'],
"Zip": value['_source']['agentPrimaryLocation'][0]['zipcode'],
"Website": value['_source']['AgentMarketingCenter']['0']['Website'],
"Facebook": value['_source']['AgentMarketingCenter']['0']['Facebook_URL'],
"LinkedIn": value['_source']['AgentMarketingCenter']['0']['LinkedIn_URL'],
"Twitter": value['_source']['AgentMarketingCenter']['0']['Twitter'],
"BIO": value['_source']['AgentMarketingCenter']['0']['Bio'],
}
except KeyError:
yield {
'Full Name': 'N/A',
'Primary Phonenumber': 'N/A',
'Email': 'N/A',
'City': 'N/A',
'State': 'N/A',
'Zip': 'N/A',
'Website': 'N/A',
'Facebook': 'N/A',
'LinkedIn': 'N/A',
'Twitter': 'N/A',
'BIO': 'N/A',
}