转换从屏幕抓取器收集的数据的建议

时间:2012-01-16 05:18:04

标签: database screen-scraping web-crawler transform

美好的一天,

我的屏幕刮刀(scrapy)收集了多个房产网站上的房产列表数据。它们都有几个常见的字段,如价格,楼面面积等。但是,与所有已删除的数据一样,字段的值现在非常不受欢迎。例如,在price中,我有明显的值,例如$1,000,000,000,但我也有$1,000,000,000 Price on AskPrice on Ask之类的内容。所以目前,我将所有已删除的字段存储为数据库中的char。

我想将数据库中的这些字符串字段从字符转换为适当的类型,例如string到int,因此我可以相应地对它们进行索引。有人可以给我一些建议,开始转换数据是明智的程序和方法吗?

1 个答案:

答案 0 :(得分:1)

你想扔掉“Price On Ask”字符串?或者是有价值的信息?

如果数据中有很多噪音,并且它没有任何兴趣,我会运行一个过滤器来删除所有非数字。

但是,如果时间允许,我更喜欢使用模式匹配显式处理数据(示例代码是PHP):

//$price is raw string
$price=str_replace(',','',$price);    //Get rid of commas
$price=str_replace('$','',$price);    //Get rid of dollar signs

if($price=='Price On Ask')$price=null;
elseif(preg_match('/^\d+$/',$price))$price=(int)$price;  //Simple number
elseif(preg_match('/^(\d+) Price On Ask$/i',$price,$parts)){
   $price=(int)$parts[1];
   }
else{
   echo "Unexpected price string: $price\n";
   $price=null;
   }

然后我有了为某些字符串设置标志的结构。此外,当数据中出现一个新字符串时,我的脚本会变得很嘈杂,我可以决定它是否重要。

(注意:将$ price设置为null意味着在数据库中放置NULL,而不是零。)