如何使用硬编码字符串填充scrapy项列表

时间:2016-03-04 15:24:57

标签: python scrapy web-crawler

我的Scrapy爬虫工作正常,目前他正在抓取一些表,但在某些网站上并不存在我想要插入到我的mysql表中的所有信息。 所以我想自己添加它们,因为在那些网站上,这些字段的信息是相同的,但我不确定如何在蜘蛛中填充它们。

当然,我可以确定管道中其中一个列表的长度,然后使用while循环在项目[' country']列表中添加例如USA,但我想做同样的事情在蜘蛛里。

我会提供一些帮助,谢谢。

用于填充列表的当前代码:

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

你想在MySQL中添加东西。这意味着您的字段不应是数组(例如display: none),而是标量(例如['my-value'])。最简单的方法是使用'my-value'代替extract_first()

extract()可让您设置如下默认值:extract_first().extract_first(default='my-default-value')

干杯