我正在尝试使用Scrapy抓取数据,并使用mapcompose清除任何不需要的字符的价格结果。
到目前为止,我得到的结果为我提供了一个干净的价格,没有任何不需要的字符,例如货币符号或任何。要么 , 但是,它给了我“额外”的空行。
import scrapy
from scrapy.loader import ItemLoader
from scrapy.loader.processors import MapCompose, Join
from makelaars.items import MakelaarsItem
class BasicSpider(scrapy.Spider):
name = 'basic'
allowed_domains = ['web']
start_urls = ['https://www.bouka-makelaars.nl/koopaanbod']
def parse(self, response):
l = ItemLoader(item=MakelaarsItem(), response=response)
#Extracting the content using css selectors
l.add_css('address', '.details.property-page-link > h2[class=address]::text')
l.add_css('price', '.price::text',MapCompose(lambda i: i.replace('.', '')),re='[.0-9]+')
return l.load_item()
到目前为止,我得到的输出是:
{'address': [u'Wezelrade 143 B',
u'Wilhelmina van Pruisenlaan 245',
u'Suzannaland 206',
u'Molenweide 32',
u'Spiraeastraat 00 2e etage',
u'Kerklaan 122',
u'Brandtstraat 163 /163A',
u'Wouwermanstraat 9 /11/13/15',
u'Scheepersstraat 100 /102/102A',
u'Honthorststraat 137 /135',
u'Brandtstraat 151 151A'],
'price': [u'119500',
u'',
u'',
u'200000',
u'',
u'',
u'269500',
u'',
u'',
u'539500',
u'',
u'',
u'200000',
u'',
u'',
u'299000',
u'280000',
u'',
u'',
u'675000',
u'',
u'',
u'495000',
u'',
u'',
u'475000',
u'',
u'',
u'350000']}
答案 0 :(得分:0)
由于只需要清除prices
列表,然后再将结果导出到CSV,因此可以执行以下操作:
(假设output
是包含您在问题中显示的内容的字典)
output['price'] = [item for item in output['price'] if item]
# empty strings in python are considered False, while others are True
更新后的output['price']
的长度将恰好为11
,如下所示:
['119500', '200000', '269500', '539500', '200000', '299000', '280000', '675000', '495000', '475000', '350000']