一直想得到成都市的商品房交易数据来进行一些分析。但苦于没有数据来源。这个想法一直被搁浅在那儿。
偶然的机会知道成都市每日的成交量在发布当天的成效数据。
就突发奇想想做一个页面抓取工具,能将每天的成交数据统计分析。可以该网站并不提供历史数据的查询,很是郁闷。
不过偶然的机会又发现另一个网站已经提供了部分历史数据的统计:
虽然通过页面的按钮只能找到10个可用的页面,但通过改变url中的page参数,我们可以找到最多75面的有效数据。
找到数据的来源了,接下来的问题就是如何从页面中抓取到想要的数据了。
这是查看到的相关的页面结构:
想要的信息有两个:1.日期 2.成交套数
一开始我想到的是将页面用DOM解析出来,然后通过xpath来找到想要的数据。
放弃这种的原因有:
- 并不是所有的网页都采用的是XHtml,很可能会解析出错。
- 利用现有大多支持XPath,查找HTML的框架都需要先做额外的工作将网页保存起来,才能进行解析,过于麻烦。
在花了些时间后,google到了jsoup这个目前非常流行的parser。
虽然不支持xpath,但它支持类似于jquery的selector来选取内容。而且可以直接通过url来解析网页。
以下是得用jsoup的代码:
public class GetHouseStatistics {
public static void main(String[] args) throws Exception {
String url = "http://newhouse.cd.soufun.com/house/web/newhouse_news_more.php?type=12193&page=";
FileWriter writer = new FileWriter(new File("house.data"));
for (int i = 1; i < 75; i++) {
Document doc = Jsoup.connect(url + i).timeout(9000).get();
Elements me = doc.select("[title$=套]");
System.out.println(me.html());
writer.append(me.html()+"\n");
}
writer.close();
}
}
以下是运行得到的结果保存成一个csv文件:
市区5月17日商品住宅成交158套
成都市区5月15日商品住宅成交41套
[成都房地产成交量]市区5月11日商品住宅成交182套
[成都房地产成交量]市区5月10日商品住宅成交183套
[成都房地产成交量]市区5月9日商品住宅成交163套
[成都房地产成交量]市区5月8日商品住宅成交53套
[成都房地产成交量]市区5月7日商品住宅成交44套
[成都房地产成交量]市区5月3日商品住宅成交171套
[成都房地产成交量]市区5月2日商品住宅成交31套
[成都房地产成交量]市区5月1日商品住宅成交31套
[成都房地产成交量]市区4月30日商品住宅成交85套
[成都房地产成交量]市区4月29日商品住宅成交219套
[成都房地产成交量]市区4月28日商品住宅成交230套
[成都房地产成交量]市区4月27日商品住宅成交170套
[成都房地产成交量]市区4月25日商品住宅成交92套
[成都房地产成交量]市区4月26日商品住宅成交104套
......
现在需要将日期和成交套数从文件中提取出来生成新的csv文件。
下面是代码:
public class Data2CVS {
public static void main(String[] args) throws Exception {
BufferedReader bufferedReader = new BufferedReader(new FileReader(new File("house.data")));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(new File("house.cvs")));
int year = 2011;
String lineData;
while ((lineData = bufferedReader.readLine()) != null) {
Pattern p = Pattern.compile("\\d+月\\d+日");
Matcher m = p.matcher(lineData);
while (m.find()) {
String date = m.group().trim();
bufferedWriter.append(year+"年"+date);
bufferedWriter.append("\t");
if(date.equals("01月01日")||date.equals("1月1日")){
year--;
}
}
p = Pattern.compile("\\d+套");
m = p.matcher(lineData);
while (m.find()) {
String date = m.group().replace("套", "");
bufferedWriter.append(date);
bufferedWriter.append("\n");
}
}
bufferedReader.close();
bufferedWriter.close();
}
}
运行得到的新的CSV文件为:
2011年5月17日 158
2011年5月15日 41
2011年5月11日 182
2011年5月10日 183
2011年5月9日 163
2011年5月8日 53
2011年5月7日 44
2011年5月3日 171
2011年5月2日 31
2011年5月1日 31
2011年4月30日 85
2011年4月29日 219
2011年4月28日 230
2011年4月27日 170
2011年4月25日 92
2011年4月26日 104
2011年4月24日 41
2011年4月23日 62
得到CSV文件,就可以很方便的利用各种工具来生成图表了。以下是利用WPS报表生成的bar chart:
分享到:
相关推荐
barChart.vue
mendix.BarChart.mpk
iOS 图表 BarChart ,BarChart 是 iOS 动态组件独立条形图表。
Delphi7.0源码生成一个柱状图表chart,使用了ntdll.dll,这个直方图表效果如图所示。使用了第三方控件实现的图表制作生成软件,功能比较强大。以下是图表测试源代码: Chart := TChart.Create(nil); try Chart...
chart.js改进版,由于我只需要Pie图、Bar图和Line图,仅这三个可以加legend,所有类型的图都可以显示label,不过必须要点上去。源程序来源于http://code.google.com/p,我看了上面的资源,略作修改。
import org.achartengine.chart.BarChart; import org.achartengine.chart.BarChart.Type; import org.achartengine.chart.BubbleChart; import org.achartengine.chart.CombinedXYChart; import org.achartengine....
交替显示Barchart Background Chart.js插件 插件,用于向图表轴(例如,水平和垂直的Barcharts或添加交替背景。 安装 npm install --save chart.js chartjs-plugin-barchart-background 用法和选项 interface ...
Unknown property name "AlwaysRecreateHotregions" in object Dundas.Charting.WebControl.Chart" when de-serialized in ASP.NET Chart. This property only exists in the WinForms Chart. The ASP.NET Chart ...
import { BarChart } from '@jhonnold/react-chart.js' ; < BarChart xss=removed> 一般的 在examples可以找到每种图表类型的直接examples 。 实时示例: 组件 import ChartComponent , { LineChart , Bar...
BarChart控件源码 BarChart控件源码 BarChart控件源码
当前的实现仅包括BarChart和LineChart。 Chart.js的资源 如何建造 npm install-安装依赖包。 npm prepare-准备开发环境。 npm start-演示样本。 npm run build-构建并输出到dist文件夹。 如何使用 将库复制到...
barColor color 设置chart的颜色 hideGirdLine color 是否隐藏背景表格 max color 设置y轴的最大值 barPressEnable color 设置chart点击是否有反应(变色) radius color 设置折线图圆形半
我是来挣点积分的。下载点击index.html就能看到3D饼图。原创,自动旋转展示,本人比较笨,花了3天写出来的
extmail-1.2.bar.tzextmail-1.2.bar.tzextmail-1.2.bar.tzextmail-1.2.bar.tzextmail-1.2.bar.tzextmail-1.2.bar.tzextmail-1.2.bar.tzextmail-1.2.bar.tz
AnimatedBarChartRace.wishyoulizationbarchartrace.1.0.0.0.pbiviz
执行bar_chart_race可视化库解决Exception: list index out of range错误
import { Line , Bar , Pie , XY } from "chart.xkcd-react" const App = ( ) => ( < Line config = { { title : 'Monthly income of an indie developer' , // optional xLabel : '
Demo中三个柱状图显示一个信息,例如一天每8小时的气温、
官方版本,亲测可用
条形图Bar graph,也就是Bar chart,用水平或者垂直的条形图来展示各种分类间分散不连续的数字比较。android端代码,可直接copy使用