2016-03-04 3 views
0

мой искатель Scrapy работает нормально, в настоящее время он сканирует некоторые таблицы, но на каком-то веб-сайте есть не вся информация, которую мне нравится вставлять в мою таблицу mysql. Итак, я подумал о том, чтобы добавить их самостоятельно, потому что на этих сайтах информация для этих полей одинакова, но я не уверен, как их заполнять в пауке.Как заполнить список предметов scrapy с жестко закодированной строкой

Конечно, я мог бы определить длину одного из списков в конвейере, а затем использовать цикл while, чтобы добавить, например, США в список [страна], но я хочу сделать то же самое в пауке.

Я бы воспользовался некоторой помощью, спасибо.

Текущий код паук для заполнения списков:

def parse(self, response): 
    for sel in response.xpath('//div[@class="pagecontainer"]'): 
     item = EbayItem() 
     item['id'] = sel.xpath('div[2]/text()[2]').extract() 
     item['user'] = sel.xpath('tr/td[2]/text()[1]').extract() 
     item['string'] = sel.xpath ('tr/td[2]/a/text()').extract() 
     item['state'] = sel.xpath('tr/td[3]/b[3]/text()').extract() 
     item['country'] = sel.xpath('tr/td[3]/b[1]/text()').extract()   
     item['weight'] = sel.xpath('tr/td[3]/b[2]/text()').extract() 
     item['position'] = sel.xpath('tr/td[4]/text()').re(r'[0-9,\-]+') 
     item['old'] = sel.xpath('tr/td[5]/text()').extract() 
     item['datetime'] = sel.xpath('tr/td[6]/text()').re('[0-9]{2}.[0-9]{2}.[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}') 
     yield item 

Приветствие

P.Halmsich

+0

вам нужно что-то вроде 'пункт [ 'страна'] =«USA'' в разборе ли()? Если бы вы не дали нам пример того, что вы хотите. – Steve

ответ

0

Вы всегда можете проверить Царапины детали для пустых результатов, используя if-else заявление. Попробуйте использовать код ниже:

def parse(self, response): 
for sel in response.xpath('//div[@class="pagecontainer"]'): 
    item = EbayItem() 
    item['id'] = sel.xpath('div[2]/text()[2]').extract() 
    item['user'] = sel.xpath('tr/td[2]/text()[1]').extract() 
    item['string'] = sel.xpath ('tr/td[2]/a/text()').extract() 
    item['state'] = sel.xpath('tr/td[3]/b[3]/text()').extract() 
    item['country'] = sel.xpath('tr/td[3]/b[1]/text()').extract() 
    if item['country'] == []: 
     item['country'] = 'USA' 
    item['weight'] = sel.xpath('tr/td[3]/b[2]/text()').extract() 
    item['position'] = sel.xpath('tr/td[4]/text()').re(r'[0-9,\-]+') 
    item['old'] = sel.xpath('tr/td[5]/text()').extract() 
    item['datetime'] = sel.xpath('tr/td[6]/text()').re('[0-9]{2}.[0-9]{2}.[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}') 
    yield item 
0

Вы хотите добавить вещи в MySQL. Это означает, что ваши поля не должны быть массивами (например, ['my-value']), но скалярами (например, 'my-value'). Самый простой способ сделать это - использовать extract_first() вместо extract().

extract_first() позволяет установить значения по умолчанию, как это: .extract_first(default='my-default-value') или просто .extract_first('my-default-value')

Приветствия

Смежные вопросы