У меня в настоящее время проблема с моим кодом: я сломаю веб-сайт и пытаюсь извлечь данные. Иногда на некоторых страницах эти данные не существуют, и тогда у меня есть очень известный indexerror, как и ожидалось. Но вся запись, прикрепленная к ней, не помещается в выходной файл: это раздражает.Scrapy not outputing record when indexerror
Как я могу найти решение для этого? Я пробовал с if if response.xpath ("whatever_data") = "": .. else ..
Я попытался попробовать метод, я попытался исключить indexerror .. ничего не сработало.
Любая идея?
Вот мой код:
class QuotesSpider(scrapy.Spider):
name = "quotes"
start_urls = ['http://www.verif.com/recherche/?search=v/1/ca/h_siren=&h_code_ape=2060Z']
def parse(self, response):
for lien_fiche in response.css('a::attr(href)').re(r'\/societe\/.+'):
yield scrapy.Request(response.urljoin(lien_fiche), callback=self.parse_fiche)
next_page = response.css('a.btn-page.btn-next::attr(onclick)').re(r'/recherche.+2060Z')[0]
if next_page is not None:
next_page = response.urljoin(next_page)
yield scrapy.Request(next_page, callback=self.parse)
def parse_fiche(self, response):
code_ape = "2060Z"
yield {
'nom': response.xpath('//td[@class="tdhead"][text()="Raison sociale "]/following-sibling::td/text()').extract_first(),
'CA 2015' : response.xpath('//td[@class="tdhead"][text()="Chiffre d\'affaires 2015 "]/following-sibling::td/a/text()').re(r'\n\s+([0-9€ ]+)'),
'Capital social' : response.xpath('//td[@class="tdhead"][text()="Capital Social "]/following-sibling::td/text()').extract_first(),
'SIRET': response.xpath('//td[@class="tdhead"][text()="SIRET "]/following-sibling::td/text()').extract_first(),
'code APE': code_ape,
'effectif': response.css('script').re(r'=(effectif.+);ca'),
'dirigeant':
response.xpath('//table[@class="table table-default dirigeants"]/tr/td[@class="tdhead"]/text()')[
0].extract() + " " + response.xpath(
'//table[@class="table table-default dirigeants"]/tr/td[@class="tdhead"]/following-sibling::td/a/text()')[
0].extract(),
}
Бест,
форматировать код вставить его в редактор SO , выделите его, затем нажмите кнопку '{}' для форматирования в блок кода, ваш отступ повсюду. –
'indexerror' означает, что вы получаете' [0] 'из пустого списка' - попробуйте стандартный' if response.xpath (...): 'без' == '' ', потому что' xpath() 'не возвращает пустую строку но пустой список. – furas