Scrapy - 无法正确格式化 csv
Scrapy - unable to format properly csv
我目前正在使用 Scrapy 进行自我培训,我想正确格式化我的导出文件。
下面是输出:(一个法国著名的分类广告网站被抓取用于训练)
"600 €,,,850 €,,,850 €,,,850 €,,770 €,,,600 €,,,600 €,,,60 €,,,782 €,,,670 €,,,700 €,,,936 €,,,730 €,,,450 €,,,800 €,,,680 €,,,865 €,,,790 €,,,880 €,,,850 €,,,900 €,,,813 €,,,850 €,,,795 €,,,560 €,,,900 €,,,750 €,,,950 €,,,390 €,,,875 €,,,650 €,,,799 €,,,825 €,,,695 €,,,790 €,,","Studio meublé 10m² GAITE PARIS 14e,,Très joli studio paris 14,,Studio meublé avec mezzanine Porte d'Orléans,,Studio 1 pièce 33 m²,,STUDIO 20m² - Métro ALESIA -St Pierre de Montrouge,,Studio meublé porte d'Orléans,,Location courte durée Studio 14ème Alésia,,Studio paris 14eme libre dec et janv/nuit,,Appartement 2 pièces 29 m²,,Appartement Alésia / 14ème arrondissement,,Studio meublé a louer de suite,,STUDIO rue Pernety 75014,,Studio 15m2 - Paris 14ème,,Appartement Paris 14eme 35m² 1- 4 personnes,,Beau 2 pieces 14eme arrondissement,,Petit studio a louer,,Studio au coeur de paris- montparnasse,,Studio Paris 14e à louer,,Studio 27m² meublé,,Studio 1 pièce 22 m²,,Studio,,Studio 1 pièce 31 m²,,Studio 1 pièce 25 m²,,Appartement 1 pièce 23 m²,,Studette meublé 9m² ALESIA,,Studio 25 m2 à Paris 14,,Appartement 17m proche métro Glacière,,2 Pièces au calme proche Montparnasse,,Studette paris 14eme,,STUDIO 26M2 PARIS 14e ALESIA,,STUDETTE 16m2 RUE D ALESIA 650 EUROS,,Studio meublé et équipé résidence Consul,,Studio 22,5 m2 Métro Pernety,,Appartement 1 pièce 19 m²,,Studio meublé avec 2 balcons Montparnasse Pernety,",""
所以基本上我有:
Price1,Price2,Price3... description1,description2,description3..
我想要:
Price 1, Description1
Price 2, Description2
等等
这是我的代码:
class LbcSpider(scrapy.Spider):
name = 'lbc'
start_urls = ['https://www.leboncoin.fr/locations/offres/ile_de_france/?th=1&location=Paris%2075014&parrot=0&mre=950&sqe=4&ret=2']
# j'étais en train de me mettre sur lbc pour scrapper les pages
def parse(self, response):
# extraction des infos de la page 1
yield {
# extraction du titre
# 'title': response.css(
# 'a.list_item.clearfix.trackable section.item_infos h2.item_title::text').re(r'\s{20,}(.*)'),
'title': response.css(
'a.list_item.clearfix.trackable section.item_infos h2.item_title::text').re(r'\s{20,}(.*)'),
# extraction prix
'Price': response.css(
'a.list_item.clearfix.trackable section.item_infos h3.item_price::text').re(r'\s{20,}(.*)'),
}
# visite des pages suivantes
# avec for on extrait de la liste chaque url pour la parser
# on ajoute http car pour une raison inconnue elle ne fait pas partie de l'extract?
next_page = response.xpath('//a[@id="next"]/@href').extract()
if next_page is not None:
# modification pour avoir plusieurs url
for href in next_page:
yield scrapy.Request('http:' + href, callback=self.parse)
# next_page = response.urljoin(next_page)
#yield scrapy.Request(next_page, callback=self.parse)
我的问题如下:
- 为什么当我的代码将调用放在最后位置时价格值排在第一位?
- 如何在每次调用时添加“\n”来创建一个新行?
最佳,
scrapy 提取器生成所有已抓取项目的列表。
我认为将项目的抓取和返回分开会更容易,以便正确格式化输出文件,如下所示:
def parse(self, response):
title = # Scrape the titles
Price = # Scrape the prices
result = zip(title, Price)
for title, Price in result:
item = LbcItem()
item['title'] = title
item['Price'] = Price
yield item
通过这种方式,您首先抓取所有价格和标题,将它们存储在单独的列表中,然后压缩它们并迭代压缩的 result
-变量。
通过这种方式,您可以分配每个项目并分别产生它,这应该会以您想要的方式产生。
此外,您可以通过在项目设置中定义 FEED_EXPORT_FIELDS
来定义在 csv-export 中导出项目的顺序(参见 here)
我目前正在使用 Scrapy 进行自我培训,我想正确格式化我的导出文件。 下面是输出:(一个法国著名的分类广告网站被抓取用于训练)
"600 €,,,850 €,,,850 €,,,850 €,,770 €,,,600 €,,,600 €,,,60 €,,,782 €,,,670 €,,,700 €,,,936 €,,,730 €,,,450 €,,,800 €,,,680 €,,,865 €,,,790 €,,,880 €,,,850 €,,,900 €,,,813 €,,,850 €,,,795 €,,,560 €,,,900 €,,,750 €,,,950 €,,,390 €,,,875 €,,,650 €,,,799 €,,,825 €,,,695 €,,,790 €,,","Studio meublé 10m² GAITE PARIS 14e,,Très joli studio paris 14,,Studio meublé avec mezzanine Porte d'Orléans,,Studio 1 pièce 33 m²,,STUDIO 20m² - Métro ALESIA -St Pierre de Montrouge,,Studio meublé porte d'Orléans,,Location courte durée Studio 14ème Alésia,,Studio paris 14eme libre dec et janv/nuit,,Appartement 2 pièces 29 m²,,Appartement Alésia / 14ème arrondissement,,Studio meublé a louer de suite,,STUDIO rue Pernety 75014,,Studio 15m2 - Paris 14ème,,Appartement Paris 14eme 35m² 1- 4 personnes,,Beau 2 pieces 14eme arrondissement,,Petit studio a louer,,Studio au coeur de paris- montparnasse,,Studio Paris 14e à louer,,Studio 27m² meublé,,Studio 1 pièce 22 m²,,Studio,,Studio 1 pièce 31 m²,,Studio 1 pièce 25 m²,,Appartement 1 pièce 23 m²,,Studette meublé 9m² ALESIA,,Studio 25 m2 à Paris 14,,Appartement 17m proche métro Glacière,,2 Pièces au calme proche Montparnasse,,Studette paris 14eme,,STUDIO 26M2 PARIS 14e ALESIA,,STUDETTE 16m2 RUE D ALESIA 650 EUROS,,Studio meublé et équipé résidence Consul,,Studio 22,5 m2 Métro Pernety,,Appartement 1 pièce 19 m²,,Studio meublé avec 2 balcons Montparnasse Pernety,",""
所以基本上我有:
Price1,Price2,Price3... description1,description2,description3..
我想要:
Price 1, Description1
Price 2, Description2
等等
这是我的代码:
class LbcSpider(scrapy.Spider):
name = 'lbc'
start_urls = ['https://www.leboncoin.fr/locations/offres/ile_de_france/?th=1&location=Paris%2075014&parrot=0&mre=950&sqe=4&ret=2']
# j'étais en train de me mettre sur lbc pour scrapper les pages
def parse(self, response):
# extraction des infos de la page 1
yield {
# extraction du titre
# 'title': response.css(
# 'a.list_item.clearfix.trackable section.item_infos h2.item_title::text').re(r'\s{20,}(.*)'),
'title': response.css(
'a.list_item.clearfix.trackable section.item_infos h2.item_title::text').re(r'\s{20,}(.*)'),
# extraction prix
'Price': response.css(
'a.list_item.clearfix.trackable section.item_infos h3.item_price::text').re(r'\s{20,}(.*)'),
}
# visite des pages suivantes
# avec for on extrait de la liste chaque url pour la parser
# on ajoute http car pour une raison inconnue elle ne fait pas partie de l'extract?
next_page = response.xpath('//a[@id="next"]/@href').extract()
if next_page is not None:
# modification pour avoir plusieurs url
for href in next_page:
yield scrapy.Request('http:' + href, callback=self.parse)
# next_page = response.urljoin(next_page)
#yield scrapy.Request(next_page, callback=self.parse)
我的问题如下:
- 为什么当我的代码将调用放在最后位置时价格值排在第一位?
- 如何在每次调用时添加“\n”来创建一个新行?
最佳,
scrapy 提取器生成所有已抓取项目的列表。
我认为将项目的抓取和返回分开会更容易,以便正确格式化输出文件,如下所示:
def parse(self, response):
title = # Scrape the titles
Price = # Scrape the prices
result = zip(title, Price)
for title, Price in result:
item = LbcItem()
item['title'] = title
item['Price'] = Price
yield item
通过这种方式,您首先抓取所有价格和标题,将它们存储在单独的列表中,然后压缩它们并迭代压缩的 result
-变量。
通过这种方式,您可以分配每个项目并分别产生它,这应该会以您想要的方式产生。
此外,您可以通过在项目设置中定义 FEED_EXPORT_FIELDS
来定义在 csv-export 中导出项目的顺序(参见 here)