分享一个天气历史数据的采集脚本
2014-01-22 11:28
501 查看
最近一个项目中需要用到过往的天气数据, 我找到了天气后报这个网站 (www.tianqihoubao.com), 并在SS中完成了相关采集, 和大家分享一下.
首先分析这个网站提供了两种信息:
1. 省市关系
2. 天气记录
对应的我们创建数据结构:
>> 网站一共提供34个直辖市/省/特区的天气信息, 完整的列表在: http://www.tianqihoubao.com/lishi/index.htm
View Code
>> 运行效果:
首先分析这个网站提供了两种信息:
1. 省市关系
2. 天气记录
对应的我们创建数据结构:
[Serializable] public class Province { public string ProvinceName; public string ProvinceUrl; } [Serializable] public class City { public Province Province; public string CityName; public string CityUrl; } [Serializable] public class WeatherDataSet { public City City; public string Title; public string Url; } [Serializable] public class WeatherData { public WeatherDataSet DataSet; public string Date; public string TextWeather; public string Temp; public string Wind; }
>> 网站一共提供34个直辖市/省/特区的天气信息, 完整的列表在: http://www.tianqihoubao.com/lishi/index.htm
public void Run()
{
Logger.ClearAll();
Default.ScriptErrorsSuppressed = true;
var pl = GetProvinceList();
foreach(var p in pl)
{
Logger.Log(p.ProvinceName);
Logger.Log(p.ProvinceUrl);
}
var cl = GetCityList(pl[1]);
foreach(var c in cl)
{
Logger.Log(c.Province.ProvinceName);
Logger.Log(c.Province.ProvinceUrl);
Logger.Log(c.CityName);
Logger.Log(c.CityUrl);
}
var ds = GetWeatherDataSet(cl[1]);
foreach(var d in ds)
{
Logger.Log(d.City.CityName);
Logger.Log(d.Title);
Logger.Log(d.Url);
}
var dl = GetWeatherData(ds[0]);
foreach(var d in dl)
{
Logger.Log(d.DataSet.Title);
Logger.Log(d.Date);
Logger.Log(d.TextWeather);
Logger.Log(d.Temp);
Logger.Log(d.Wind);
}
}
public List<Province> GetProvinceList()
{
Default.Navigate("http://www.tianqihoubao.com/lishi/index.htm");
Default.Ready("#content DT");
var list = Default.SelectNodes("#content DT a");
var result = new List<Province>();
foreach(var item in list)
{
var p = new Province();
p.ProvinceName = item.Text();
p.ProvinceUrl = item.Attr("href");
p.ProvinceUrl = new Uri(Default.Url, p.ProvinceUrl).ToString();
result.Add(p);
}
return result;
}
public List<City> GetCityList(Province province)
{
Default.Navigate(province.ProvinceUrl);
Default.Ready("#content DD");
var list = Default.SelectNodes("#content DD a");
var result = new List<City>();
foreach(var item in list)
{
var c = new City();
c.Province = province;
c.CityName = item.Text();
c.CityUrl = item.Attr("href");
c.CityUrl = new Uri(Default.Url, c.CityUrl).ToString();
result.Add(c);
}
return result;
}
public List<WeatherDataSet> GetWeatherDataSet(City city)
{
Default.Navigate(city.CityUrl);
Default.Ready("#content>div.pcity");
var list = Default.SelectNodes("#content>div.pcity a");
var result = new List<WeatherDataSet>();
foreach(var item in list)
{
var ds = new WeatherDataSet();
ds.Title = item.Text();
ds.Url = item.Attr("href");
ds.Url = new Uri(Default.Url, ds.Url).ToString();
ds.City = city;
result.Add(ds);
}
return result;
}
public List<WeatherData> GetWeatherData(WeatherDataSet ds)
{
Default.Navigate(ds.Url);
Default.Ready("#content>table.b");
var list = Default.SelectNodes("#content>table.b tr:gt(0)");
var result = new List<WeatherData>();
foreach(var item in list)
{
var d = new WeatherData();
d.DataSet = ds;
d.Date = item.SelectSingleNode("td:eq(0)").Text();
d.TextWeather = item.SelectSingleNode("td:eq(1)").Text();
d.Temp = item.SelectSingleNode("td:eq(2)").Text();
d.Wind = item.SelectSingleNode("td:eq(3)").Text();
result.Add(d);
}
return result;
}
[Serializable] public class Province { public string ProvinceName; public string ProvinceUrl; } [Serializable] public class City { public Province Province; public string CityName; public string CityUrl; } [Serializable] public class WeatherDataSet { public City City; public string Title; public string Url; } [Serializable] public class WeatherData { public WeatherDataSet DataSet; public string Date; public string TextWeather; public string Temp; public string Wind; }
View Code
>> 运行效果:
相关文章推荐
- 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
- 写一个shell脚本利用wget抓取股票历史数据
- 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
- 分享一个SQL SERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
- web数据采集核心技术分享系列(一)做一个强大的web数据采集系统,你需要什么?
- 写一个shell脚本利用wget抓取股票历史数据
- 分享一个自己写的用python比对数据库表数据的脚本
- (转)分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
- [MSSQL]分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
- 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
- 用shell写一个mysql数据备份脚本
- 分享我的一个脚本,检测程序更新,有更新做备份
- php实现的一个很好用HTML解析器类可用于采集数据
- 分享一个仿就看天气应用源码
- 【开源】C#.NET股票历史数据采集,【附18年历史数据和源代码】
- 分享一个百度的接口地址可以用来测试json数据用
- MySQL数据库运行状态数据采集的脚本
- 分享一个遍历当前文件夹下所以子目录,并在子目录中执行其他操作的shell脚本
- Ruby实现的一个强大的批量删除文件脚本分享
- 一个简单的防CC攻击Shell脚本分享