爬虫分析的问题,在线等大神。。
发布于 10 年前 作者 CarlosRen 7933 次预览 最后一次回复是 7 年前 来自 问答
工作原因,需要提供一个外汇汇率的实时接口,各位大神有好爬的网站可以推荐一发,没有的话可以看小弟找的这个 传送门在这里: 传送门-斯通纳德
这是小菜鸡写的代码:
var url = require('url');
var superagent = require('superagent');
var cheerio = require('cheerio');
var eventproxy = require('eventproxy');
var targetUrl = 'http://quote.fx168.com/showration/';
superagent.get(targetUrl).end(function(err,res){
console.log(res.text);
var $ = cheerio.load(res.text);
$('.unnamed1').each(function (idx, element) {
console.log(element);
});
});
首先说下我的思路,哪不对各位大神指教一下哈 1 把目标网页源码爬下来 2 用cheerio解析 3 把上面两步做成接口,传送json数据
然后写cheerio的时候我整个人都斯巴达了
12 回复
明显异步加载的,给你找到了,直接是类似jsonp的格式,爽YY了。
http://service.fx168.com/IDataPlatform/Quote/IQuoteConversionList.ashx?user=fx168&succ_callback=GetHbdhlSuccess
它这不是提供了jsonp接口了么, 在浏览器里面直接用就是了,为啥还要开服务端扒站? http://service.fx168.com/IDataPlatform/Quote/IQuoteConversionList.ashx?user=fx168&succ_callback=GetHbdhlSuccess
@cnwhy 哈!好巧呀, 刚发出去,发现你也发了。
@shy2850 这。。侧面突出了我菜狗的本质。。。咋找的
还真有!
mark
@cnwhy @shy2850 jsonp接口返回数据太大了,有没有参数指定汇率啊?比如我只关心usd/cny
@meekr 按你原本抓页面的方式抓这个接口 然后再过滤不就可以了么。自己包装一层接口。
@meekr @feliving nodejs不太会 java写的解析 可以后面直接插入自己的数据库
==========class GetJsonFromUrl=========== package web.json; import java.io.; import java.net.; public class GetJsonFromUrl { protected String getJsonString(String urlPath) throws Exception {
URL url = new URL(urlPath);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.connect();
InputStream inputStream = connection.getInputStream();
//对应的字符编码转换
Reader reader = new InputStreamReader(inputStream, “UTF-8”);
BufferedReader bufferedReader = new BufferedReader(reader);
String str = null;
StringBuffer sb = new StringBuffer();
while ((str = bufferedReader.readLine()) != null) {
sb.append(str);
}
reader.close();
connection.disconnect();
return sb.toString();
}
}
=======class test ============ package web.json;
import net.sf.json.JSONArray; import net.sf.json.JSONObject;
public class Test {
}
BTW:nodejs应该更简单思路就是 收到请求,去掉包装,然后字符串转json或者直接操作字符串,拆他的结构
@CarlosRen 那明显js的代码要简单的多。 一般jsonp去掉callback参数返回的就是json格式数据.
过滤美元对人民币
cheerio慢一点,可以选择自己正则
node.js 没有直接解析 jsonp格式的中间件吗? npm 上面的一个superAgent-jsonp,可以试试。