怎样扒取网页的动态数据

TOUCH_H2 2015-07-06 09:45:48
最近老总给了个任务,说是把别人网站上的数据扒取过来,然后和我们自己的数据进行比较,作为一个java新手,真心搞不定,试过用HTMLParser和HttpClient都只能扒取到在源代码中能够看到的数据,对于那些通过JS动态生成的数据要怎么得到呢,在贴吧有个吧友说“可以在浏览器的开发模式跟踪一下有没有请求数据接口。如果有数据接口的话,处理起来比静态的页面还要简单”,还是没明白什么意思,求懂的人详细说下
...全文
1029 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
TOUCH_H2 2015-07-10
  • 打赏
  • 举报
回复
引用 14 楼 rui888 的回复:
9楼 js 里面的。 分析他的js 。
大神啊,方便的话加我QQ:1003079881
tony4geek 2015-07-10
  • 打赏
  • 举报
回复
9楼 js 里面的。 分析他的js 。
TOUCH_H2 2015-07-10
  • 打赏
  • 举报
回复
引用 11 楼 lingyun_zheng 的回复:
这个网上抓 取的代码很多啊
多是多,不过基本上都是抓取不是用JS生成数据的网页
TOUCH_H2 2015-07-10
  • 打赏
  • 举报
回复
引用 10 楼 rui888 的回复:
js中 部分数据
 "23:55
01:30
广州白云机场
三亚凤凰机场
首都航空JD5167
机型:320
¥528	
减最高 ¥42
返最高 ¥4
订  票
税费:50飞行时间:1小时35分无正餐
同程特惠	 6.6折  经济舱	退改签	购票说明	
原价 ¥  570   
¥528	    	 预    订	
经济舱	 6.7折  经济舱	退改签	  	
原价 ¥  570   
¥570	¥2 ¥1	 预    订	
经济舱	 全折  经济舱	退改签	  	
原价 ¥  840   
¥840	¥4  	 预    订	
往返更优惠	 6.6折  经济舱	退改签	购票说明	
原价 ¥  559   
¥529	    	 预    订	
自助飞-网络预订专享	 6.7折  经济舱	退改签	购票说明	
原价 ¥  570   
¥537	    	 预    订	
23:10
00:40
广州白云机场
三亚凤凰机场
南方航空CZ6734
机型:320
¥571	
减最高 ¥19
订  票
22:20
23:50
广州白云机场
三亚凤凰机场
南方航空CZ6736
机型:321
¥651	
减最高 ¥19
订  票
07:55
09:30
广州白云机场
三亚凤凰机场
海南航空HU7006
机型:738
¥723	
减最高 ¥37
返最高 ¥63
订  票
20:00
21:20
广州白云机场
三亚凤凰机场
海南航空HU7322
机型:738
¥723	
减最高 ¥37
返最高 ¥63
订  票
06:45
08:15
广州白云机场
三亚凤凰机场
南方航空CZ6748
机型:319
¥821	
减最高 ¥19
订  票
09:30
11:00
广州白云机场
三亚凤凰机场
南方航空CZ6742
机型:320
¥821	
减最高 ¥19
订  票
12:10
13:30
广州白云机场
三亚凤凰机场
南方航空CZ6746
机型:321
¥821	
减最高 ¥19
订  票
13:40
15:00
广州白云机场
三亚凤凰机场
南方航空CZ394
机型:320
¥821	
减最高 ¥19
订  票
14:40
16:10
广州白云机场
三亚凤凰机场
南方航空CZ6738
机型:320
¥821	
减最高 ¥19
订  票
17:35
19:10
广州白云机场
三亚凤凰机场
南方航空CZ6730
机型:321
¥821	
减最高 ¥19
订  票
20:20
21:40
广州白云机场
三亚凤凰机场
南方航空CZ6750
机型:738
¥821	
减最高 ¥19
订  票"
这个是怎么做的到
tony4geek 2015-07-10
  • 打赏
  • 举报
回复
没有代码。上面结果是我调试的。
TOUCH_H2 2015-07-10
  • 打赏
  • 举报
回复
引用 17 楼 rui888 的回复:
上不了Q,只能技术网站
能把你代码贴出来不
tony4geek 2015-07-10
  • 打赏
  • 举报
回复
上不了Q,只能技术网站
lingyun_zheng 2015-07-07
  • 打赏
  • 举报
回复
这个网上抓 取的代码很多啊
tony4geek 2015-07-07
  • 打赏
  • 举报
回复
js中 部分数据
 "23:55
01:30
广州白云机场
三亚凤凰机场
首都航空JD5167
机型:320
¥528	
减最高 ¥42
返最高 ¥4
订  票
税费:50飞行时间:1小时35分无正餐
同程特惠	 6.6折  经济舱	退改签	购票说明	
原价 ¥  570   
¥528	    	 预    订	
经济舱	 6.7折  经济舱	退改签	  	
原价 ¥  570   
¥570	¥2 ¥1	 预    订	
经济舱	 全折  经济舱	退改签	  	
原价 ¥  840   
¥840	¥4  	 预    订	
往返更优惠	 6.6折  经济舱	退改签	购票说明	
原价 ¥  559   
¥529	    	 预    订	
自助飞-网络预订专享	 6.7折  经济舱	退改签	购票说明	
原价 ¥  570   
¥537	    	 预    订	
23:10
00:40
广州白云机场
三亚凤凰机场
南方航空CZ6734
机型:320
¥571	
减最高 ¥19
订  票
22:20
23:50
广州白云机场
三亚凤凰机场
南方航空CZ6736
机型:321
¥651	
减最高 ¥19
订  票
07:55
09:30
广州白云机场
三亚凤凰机场
海南航空HU7006
机型:738
¥723	
减最高 ¥37
返最高 ¥63
订  票
20:00
21:20
广州白云机场
三亚凤凰机场
海南航空HU7322
机型:738
¥723	
减最高 ¥37
返最高 ¥63
订  票
06:45
08:15
广州白云机场
三亚凤凰机场
南方航空CZ6748
机型:319
¥821	
减最高 ¥19
订  票
09:30
11:00
广州白云机场
三亚凤凰机场
南方航空CZ6742
机型:320
¥821	
减最高 ¥19
订  票
12:10
13:30
广州白云机场
三亚凤凰机场
南方航空CZ6746
机型:321
¥821	
减最高 ¥19
订  票
13:40
15:00
广州白云机场
三亚凤凰机场
南方航空CZ394
机型:320
¥821	
减最高 ¥19
订  票
14:40
16:10
广州白云机场
三亚凤凰机场
南方航空CZ6738
机型:320
¥821	
减最高 ¥19
订  票
17:35
19:10
广州白云机场
三亚凤凰机场
南方航空CZ6730
机型:321
¥821	
减最高 ¥19
订  票
20:20
21:40
广州白云机场
三亚凤凰机场
南方航空CZ6750
机型:738
¥821	
减最高 ¥19
订  票"
tony4geek 2015-07-07
  • 打赏
  • 举报
回复
js格式化去看 ,他有自己的逻辑。自己去分析。

                        __fListVariable.allAjax.push(function() {
                                fish.ajax({url: _flight("searchLineUrl"),type: "json",timeout: 99999,data: "offPort=" + showNow().offPort + "&arrPort=" + showNow().arrPort + "&date=" + showNow().date + "&queryParagraph=" + __fListVariable.current,fn: function(data) {
                                                __fListVariable.ajaxIng--;
                                                __fListVariable.allAjax.send();
                                                __fListVariable.searchOneTime = fish.ready(function() {
                                                        hideComps();
                                                        var dom1 = fish.one("#allFlightListDom_1"), dom2 = fish.one("#allFlightListDom_2");
                                                        if (data.state == 100) {
                                                                if (_flight("searchType") != 0) {
                                                                        fish.one("#otherWayTitle").removeClass("none")
                                                                }
                                                                var temp = fish.one("#allFlightListTemp").val(), dataTemp, domHtml, companyTemp, domCompany, atDomElem, dataTime = fish.parseDate(data.seckillTime);
                                                                var temps = {temp: temp,text: showNow().orderText,offPort: showNow().offPort,arrPort: showNow().arrPort};
                                                                __fListVariable.openTimeIng = dataTime;
                                                                setInterval(function() {
                                                                        dataTime = fish.parseDate(dataTime, {seconds: 1});
                                                                        __fListVariable.openTimeIng = dataTime
                                                                }, 1000);
                                                                if (__fListVariable.current == 1) {
                                                                        dataTemp = __fListVariable.flightDataOne = fish.lang.extend(parseSearchData(data.result), {searchType: _flight("searchType"),getCanUse: fish.dom("#hidCanUse").value});
                                                                        companyTemp = __fListVariable.flightDataOne.company;
                                                                        atDomElem = dom1
                                                                } else {
                                                                        dataTemp = __fListVariable.flightDataTwo = fish.lang.extend(parseSearchData(data.result), {searchType: _flight("searchType"),getCanUse: fish.dom("#hidCanUse").value});
                                                                        companyTemp = __fListVariable.flightDataTwo.company;
                                                                        atDomElem = dom2
                                                                }
                                                                domHtml = fish.one("div.flightList", atDomElem);
                                                                domCompany = fish.one("div.companyBox", atDomElem);
                                                                domHtml.html(fish.template(temps, dataTemp));
                                                                if (__fListVariable.current == 1) {
                                                                        __fListVariable.sGAllTime = new Date() - __fListVariable.sStart
                                                                } else {
                                                                        __fListVariable.sBAllTime = new Date() - __fListVariable.sStart
                                                                }
                                                                domCompany.html(fish.template(fish.one("#flightCompany").val(), companyTemp));
                                                                fish.dom("select.ftitle_company", domCompany).onchange = companySort;
                                                                fish.one("#loading").addClass("none");
                                                                if (__fListVariable.current == "1") {
                                                                        dom1.removeClass("none")
                                                                } else {
                                                                        dom2.removeClass("none")
                                                                }
                                                                var flightD, cabinD, flightInner, flightOuter, cabinInner, cabinOuter, SFInner, SFOuter, innerAll = [];
                                                                var flights = [], __cloneSFElem;
                                                                var allList = fish.all("div.flist_box", domHtml);
                                                                for (var n = 0; n < dataTemp.result.length; n++) {
                                                                        flightD = dataTemp.result[n].flight;
                                                                        cabinD = dataTemp.result[n].cabin;
                                                                        flights[flights.length] = {elem: allList[n],elemcabin: null,offtime: parseInt(flightD.offTime.replace(":", ""), 10),compc: flightD.compC,price: parseInt(cabinD[0].showPrice, 10),flightD: flightD,cabinD: cabinD,index: n,btnText: showNow().orderText,closeCabin: null};
                                                                        var trElem = fish.all("tr", allList[n]), printD = trElem.length;
                                                                        fish.lang.extend(dataTemp.result[allList[n].getAttribute("thisN")].flight, {printD: printD,Guid: dataTemp.guid,searchType: _flight("searchType"),btnText: showNow().orderText,show: true})
                                                                }
                                                                __fListVariable.current == "1" ? __fListVariable.compositorOne = flights : __fListVariable.compositorTwo = flights;
                                                                var selectElem = fish.dom("select.ftitle_sel", atDomElem);
                                                                if (selectElem) {
                                                                        showSort(selectElem)
                                                                }
                                                                showFirstCabin()
                                                        } else {
                                                                fish.one("div.flightList", dom1).html("");
                                                                fish.one("div.flightList", dom2).html("");
                                                                fish.one("#loading").addClass("none");
                                                                fish.one("#searchNoFlight").removeClass("none")
                                                        }
                                                        flightListBorder();
                                                        if (_flight("searchType") == 0 && _flight("newRecord")) {
                                                                var puanduan = false;
                                                                fish.ajax({url: _flight("newRecord"),data: "OrgportCode=" + _flight("port_0") + "&DesPortCode=" + _flight("port_1"),fn: function(data) {
                                                                                var dataType = eval("(" + data + ")");
                                                                                if (dataType.state == 100) {
                                                                                        fish.dom("#recentOrder span.sp_lenum").innerHTML = dataType.peoplenum;
                                                                                        if (dataType.hours == "0") {
                                                                                                fish.dom("#recentOrder span.sp_time").innerHTML = "<em class='digital_color'>" + dataType.minutests + "</em>分钟"
                                                                                        } else {
                                                                                                fish.dom("#recentOrder span.sp_time").innerHTML = "<em class='digital_color'>" + dataType.hours + "</em>小时<em class='digital_color'>" + dataType.minutests + "</em>分钟"
                                                                                        }
                                                                                        fish.dom("#recentOrder p.p_flight").innerHTML = dataType.tips;
                                                                                        fish.dom("#recentOrder").style.display = "block";
                                                                                        puanduan = true;
                                          
                }
TOUCH_H2 2015-07-07
  • 打赏
  • 举报
回复
引用 7 楼 rui888 的回复:
网址 的数据来源于 这里 。 js 里面就有数据的解析 。
表示这个JS没看懂 ,还是全写在一行的
scmod 2015-07-06
  • 打赏
  • 举报
回复
动态一般的是ajax出来的,那个数据接口意思应该就是个链接请求地址吧 js发请求获取,那用httpclient也能发那个请求获取结果的 只要找到那个请求地址就行了
v1p411805303 2015-07-06
  • 打赏
  • 举报
回复
同求解决办法
tony4geek 2015-07-06
  • 打赏
  • 举报
回复
网址 的数据来源于 这里 。 js 里面就有数据的解析 。
tony4geek 2015-07-06
  • 打赏
  • 举报
回复
上面图片的那个网站数据js 基本都是加密的,比较麻烦得自己去分析他的源码。 这些数据就是金钱估计比较麻烦。
TOUCH_H2 2015-07-06
  • 打赏
  • 举报
回复
引用 3 楼 rui888 的回复:
这个得具体分析具体的网页,请求对应的动态方法。有直接可以解析html的。 有的是js 动态拼装的数据。 动态模拟调用,他动态的肯定有个action 类似的请求 调用后台,找到类似的action 调用。
请问如何动态模拟调用
TOUCH_H2 2015-07-06
  • 打赏
  • 举报
回复
2L说的我能明白,我也试过了,我在IE浏览器的开发模式下很多网站,一般的网站的那个数据链接地址我都能找到,可是那个网站的数据页面竟然找不到,不信你试试 www.qunaer.com
tony4geek 2015-07-06
  • 打赏
  • 举报
回复
这个得具体分析具体的网页,请求对应的动态方法。有直接可以解析html的。 有的是js 动态拼装的数据。 动态模拟调用,他动态的肯定有个action 类似的请求 调用后台,找到类似的action 调用。

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧