我的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
答案 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')
干杯