我想用scrapy把商店的位置刮成csv。我捕捉到了正确的数据,但输出的结果是这样的(以 "名称 "字段为例)。
代码。
import scrapy
from xx.items import xxItem
class QuotesSpider(scrapy.Spider):
name = 'xx_spider'
allowed_domains = ['www.my.xx.com']
start_urls = [
'https://my.xx.com/storefinder/list/a',
]
def parse(self, response):
rows = response.css('div.col-md-4.col-sm-6')
for row in rows:
item = xxItem()
item['name'] = rows.css('h3::text').extract()
item['address'] = rows.css('p::text').extract()
return item
return语句用于结束函数调用的执行,并将结果(return关键字后的表达式的值)"返回 "给调用者。
参考文献 联系.
因此,当你使用 return
关键字,你的代码执行就会停止。相反,你需要使用 yield
关键字。
替换语句 return item
与 yield item
并将其移至 for loop
范围。
代码与变化。
import scrapy
from xx.items import xxItem
class QuotesSpider(scrapy.Spider):
name = 'xx_spider'
allowed_domains = ['www.my.xx.com']
start_urls = [
'https://my.xx.com/storefinder/list/a',
]
def parse(self, response):
rows = response.css('div.col-md-4.col-sm-6')
for row in rows:
item = xxItem()
item['name'] = row.css('h3::text').extract()
item['address'] = row.css('p::text').extract()
yield item
要在csv文件中存储数据,请使用命令运行您的spider。
scrapy crawl xx_spider -o output_file.csv
希望能帮到你:)