test.rar(15.93 KB, 下载次数: 0)

1 小时前 上传

点击文件名下载附件

这html的内容靠什么是如何排序的,有没有办法让右键查看时候源码里面输出正常排序的
phantomjs不行

会解决的50红包奉上,主要是想学习自己不会的东西。

ps:可以直接浏览器打开html文件看效果

能给他重新排序正常才能去爬。不是指手动改正排序。

现在连原理都不知道,能用php重新排序那最好了。

有些人看不明白我说的,我在详细表达一下问题。

正常打开第一行是

  1.     “对,男孩儿这几年蹿个儿特别快。”

复制代码

查看源码第一行是

  1. 贺寂摊了摊手,“不知道。

复制代码

答案都在楼下了,js改成本地做个备份给后人参考
请写出php的大佬联系我领红包,同时感谢其他mjj的贡献,此贴保留,为论坛做贡献

浙江网友:正文内容直接就是按dom顺序遍历存为一个数组。
base64.decode(document.getElementsByTagName(‘meta’)[5].getAttribute(‘content’)).split(/[A-Z]+%/)
这里把content里的排序解密,在按 单个字母%分割存为一个数组
比如解密出来后,前三个数字是[13,7,10,……]
再遍历排序数组,通过
var k = Math.ceil((i + 1) % this.code);
                k = Math.ceil(m – k);
                return k
计算最后得出来的顺序,m就是13,i就是循环的i从0开始,this.code是页面上的codeurl值,这个网页是6。
就是k = Math.ceil((0+1) % 6);
      k = Math.ceil(13-1);
那么最后得出排序是12。
那么然后存为一个新的数组 list[12] = this.box.childNodes[0];
也就是说源代码的第一句this.box.childNodes[0],最后算出来是显示的第十三句list[12];
中间有些代码是插入防浏览器里复制的不用管。
湖北网友:楼下了
湖北网友:稍等 我来看看
青海网友:br 是换行,就是靠换行来排序的
湖南网友:哪里有排序???
广东网友:正常的换行啊,没看懂你的意思
云南网友: JS 加密, 扣算法可以了…还不如发网页
湖北网友:里面的域名就是原网页。抠出来只是方便大佬看
福建网友:楼下我不会
海南网友:
干不了。服务器加的随机排序
辽宁网友:
干不了。服务器加的随机排序
辽宁网友:把原页面的js文件 都打包一下,算法很可能在那个article.js?tt=xxxxx 文件中
所以它比较关键 我这里无法访问这个文件
香港网友:算法都在article.js里,排序在<meta name="client" content="MTNKJTdYJTEwRyU4RiU2SSUxOFMlMTBIJTEzTiUyNFclMThKJTIwTyUyMlolMjdIJTIyViUyMlQlMjhFJTEzWiUwWCUyNEwlMjdRJTVUJTE0RiUxOEclM1clMThGJThFJTE5">
base64解密一下content内容,然后分割成数组处理就行了。
重庆网友:

  1. base64 = {
  2.     map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
  3.     decode: function(a) {
  4.         var b = binary = ”;
  5.         for (var i = 0; i < a.length; i++) {
  6.             if (a.substr(i, 1) == ‘=’) {
  7.                 break
  8.             }
  9.             ;var c = this.map.indexOf(a.charAt(i)).toString(2);
  10.             binary += {
  11.                 1: ‘00000’,
  12.                 2: ‘0000’,
  13.                 3: ‘000’,
  14.                 4: ’00’,
  15.                 5: ‘0’,
  16.                 6: ”
  17.             }[c.length] + c
  18.         }
  19.         ;binary = binary.match(/[0-1]{8}/g);
  20.         for (var i = 0; i < binary.length; i++) {
  21.             b += String.fromCharCode(parseInt(binary[i], 2))
  22.         }
  23.         ;return b
  24.     }
  25. }
  26. UpWz=function(m, i) {
  27.         var k = Math.ceil((i + 1) % codeurl);
  28.         k = Math.ceil(m – k);
  29.         return k
  30.     }
  31. var e = base64.decode(document.getElementsByTagName(‘meta’)[5].getAttribute(‘content’)).split(/[A-Z]+%/);
  32. var childNodes= document.getElementById(‘content’).childNodes;
  33. var elist=[]
  34. for (var i = 0; i < e.length; i++) {
  35.             var k = this.UpWz(e[i], i);
  36.             elist[k] = childNodes[i]
  37.             }

复制代码
elist就是排序后的ele列表了,这个站为了反爬使用的是和99lib差不多的方式,都是打乱顺序
湖北网友:厉害,学习了
江西网友:但是那个正文内容div上面没有排序的id,是按什么规律自动填数组值的
青海网友:

  1. <div class="y26559276">我后来回忆,真正拉近我和路平之间距离的,是一个小姑娘。</div><div class="h449843340">她不爱喝,口渴了就自己偷大人的普洱茶喝去,那么酽的茶,咕嘟咕嘟两声就吞下去了,还知道咂吧咂吧嘴。</div><div class="o165770203">我心里软了一下,说:疼啊……</div><div class="i845318307">我后来回忆,真正拉近我和路平之间距离的,是一个小姑娘。</div><div class="f600733276">

复制代码99lib用phantomjs爬那个内容  div上有排序的id。我发的那个phantomjs执行后还是没id。比99lib要复杂
广东网友:正文内容直接就是按dom顺序遍历存为一个数组。
base64.decode(document.getElementsByTagName(‘meta’)[5].getAttribute(‘content’)).split(/[A-Z]+%/)
这里把content里的排序解密,在按 单个字母%分割存为一个数组
比如解密出来后,前三个数字是[13,7,10,……]
再遍历排序数组,通过
var k = Math.ceil((i + 1) % this.code);
                k = Math.ceil(m – k);
                return k
计算最后得出来的顺序,m就是13,i就是循环的i从0开始,this.code是页面上的codeurl值,这个网页是6。
就是k = Math.ceil((0+1) % 6);
      k = Math.ceil(13-1);
那么最后得出排序是12。
那么然后存为一个新的数组 list[12] = this.box.childNodes[0];
也就是说源代码的第一句this.box.childNodes[0],最后算出来是显示的第十三句list[12];
中间有些代码是插入防浏览器里复制的不用管。
内蒙古网友:源代码里第二行this.box.childNodes[1]
算出来就是
k = Math.ceil((1+1) % 6);
k = Math.ceil(7-2);
排序ist[5],也就是最后显示出来第6行。
反正算法就这样的。
采集要获取页面上的meta content排序,codeurl值,然后正文内容就按源代码的dom遍历存入,再排序就行了。
贵州网友:解释的很详细,谢谢大佬,我去试试能不能搞定。
山东网友:解释的很详细,谢谢大佬,我去试试能不能搞定。
云南网友:一斤多猪肉就要大佬出手啊
甘肃网友:
99lib用phantomjs可以正常爬,上面的就爬不了,js我是不懂,懂也不会来问了。
你没有仔细看我回复,我说的是phantomjs爬之后有排序的id会出来
河北网友:你没仔细看其他人的回复才对,该说的都说了,就差喂嘴里了
你一直说phantomjs爬不到这个站,那是你不会用

你再仔细看看这些个id和排序有没有关系
四川网友:

别人说的我肯定仔细看了,我来求问题能不看吗,18楼说的是解码后根据%分割得到排序  dom的div 分割存到数组 dom什么的我不会,但我也在努力学, 然后使用处理后的数组合并起来重新去排序,你说我不会用phantomjs,那大佬你来讲讲怎么使用。

浙江网友:我承认我很菜,整不明白你在说啥,所以你和其他人讨论这些问题吧,不要再回复我了,我都菜哭了,经不起折腾了
江西网友:js不是很熟,所以写了份py代码来解码
https://gist.github.com/gougou6423/818d6a40d20574e79ff7cd693534e18d

山西网友:能不能写个php版的
山东网友:你稍微修改下那个python代码,加上传参,然后用php的exec()调用不就好了
广西网友:我对py和js一无所知,难道是时候放弃php转投py?
台湾网友:我对py和js一无所知,难道是时候放弃php转投py?
内蒙古网友:
大佬这个代码有排序的效果,但是排序和原来的不一样。

原来的正常排序最后一行是

  1. 可人小孩儿千里迢迢来到这里,举目无亲,也就自己这一个算得上故旧的人,贺寂就算再是铁石心肠,也干不

复制代码

福建网友:源于@gougou6423
//PHP sort() 处理的不对 搞个for循环一下就好了

  1. <?php
  2. class MyHTMLParser {
  3.         private $line = array();
  4.         private $table = array();
  5.         private $content;
  6.         private $lines = array();
  7.         private $codeurl = 0;
  8.         public $count = 0;
  9.     public function MyHTMLParser($name) {
  10.        //print $name;
  11.        $this->content = file_get_contents($name);
  12.        preg_match_all(‘/<meta name="client" content="(.*?)">/’, $this->content, $client);
  13.        $this->table = preg_split("/[A-Z]+%/",base64_decode($client[1][0]));
  14.        $this->getline();
  15.        preg_match_all(‘/var codeurl="(.*?)";/’, $this->content, $c);
  16.        $this->codeurl = $c[1][0];
  17.     }
  18.     private function getline(){
  19.         preg_match_all(‘/<p>(.*?)<\/p>/’, $this->content, $ps);
  20.         $this->lines = $ps[1];
  21.         $this->count = count($ps[1]);
  22.     }
  23.     public function sort(){
  24.         $parr = array();
  25.         $darr = array();
  26.         foreach ($this->table as $i => $code) {
  27.                 $k = ceil(($i+1) % $this->codeurl);
  28.                 $k = ceil($code – $k);
  29.                 $parr[$k] = $this->lines[$i];
  30.         }
  31.         //sort($parr);
  32.         for ($i=0;$i<$this->count;$i++){
  33.                 //这里可以处理(<p></p>)之间的内容
  34.                 //$darr[]=$parr[$i];
  35.                 $darr[]=strip_tags($parr[$i]); //去掉html标签
  36.         }
  37.         return $darr;
  38.     }
  39. }
  40. $test = new MyHTMLParser(‘test1.html’); //文件名,url
  41. print_r($test->sort());
  42. ?>

复制代码

  1. Array
  2. (
  3.     [0] => &nbsp;&nbsp;&nbsp;&nbsp;“对,男孩儿这几年蹿个儿特别快。”
  4.     [1] => &nbsp;&nbsp;&nbsp;&nbsp;乐闲贪婪看着贺寂英挺的侧脸,用视线描摹着他的眉眼,又顺着脖颈慢慢看下去,直看到微微敞开的浴袍领口露出的小半块胸肌,他倏地收回目光,脸色不由自主地又更红了一层。
  5.     [2] => &nbsp;&nbsp;&nbsp;&nbsp;他嗓子眼儿有些发干,把水杯凑到嘴边,小小地喝了一口,回道:“对,那会儿我才刚到你胸口,你还说让我快点儿长高。”
  6.     [3] => &nbsp;&nbsp;&nbsp;&nbsp;贺寂没应声,只点了点头,斟酌了下措辞,打算旁敲侧击,问一下他的来意。
  7.     [4] => &nbsp;&nbsp;&nbsp;&nbsp;乐闲见他没说话,以为他不记得了,忙急急地提醒道:“你还给我发压岁钱了。”
  8.     [5] => &nbsp;&nbsp;&nbsp;&nbsp;他在心里又加了句,还揉了我头,让我好好学习,考你这里的a大。
  9.     [6] => &nbsp;&nbsp;&nbsp;&nbsp;其实贺寂上次回去时,但凡登门拜访的小孩儿,他都发了压岁钱,而且祝福语也都是那几句,快快长高,好好学习,考上a大来找我玩儿之类的。
  10.     [7] => &nbsp;&nbsp;&nbsp;&nbsp;都是套话。
  11.     [8] => &nbsp;&nbsp;&nbsp;&nbsp;乐闲郑重其事地把这事儿讲出来,贺寂一边觉得有点儿好笑,一边又觉得这小孩儿天真可爱,稚气未消,挺讨人喜欢的。
  12.     [9] => &nbsp;&nbsp;&nbsp;&nbsp;不过该问的还是得问清楚。
  13.     [10] => &nbsp;&nbsp;&nbsp;&nbsp;贺寂笑了笑,委婉道:“你一个人来的?怎么不提前通知一声,我也好开车来机场接你。”
  14.     [11] => &nbsp;&nbsp;&nbsp;&nbsp;乐闲诧异地睁了睁眼,疑惑道:“贺寂哥你不知道我要来吗?”
  15.     [12] => &nbsp;&nbsp;&nbsp;&nbsp;贺寂摊了摊手,“不知道。”
  16.     [13] => &nbsp;&nbsp;&nbsp;&nbsp;乐闲头顶咔嚓一声,响起一道炸雷。
  17.     [14] => &nbsp;&nbsp;&nbsp;&nbsp;贺寂根本不知道自己要来,那自己现在对他而言,不就是个贸然上门的不知礼数的小鬼头么?
  18.     [15] => &nbsp;&nbsp;&nbsp;&nbsp;乐闲急急解释道:“王、王阿姨说,她、她已经提前和你打过招呼了,说、说你同意了。我本、本来打算下飞机时给你再打个电话,但手机摔坏了,就没、没打成。”
  19.     [16] => &nbsp;&nbsp;&nbsp;&nbsp;生怕给贺寂留下坏印象,乐闲急得脸色通红,讲话都磕巴了。
  20.     [17] => &nbsp;&nbsp;&nbsp;&nbsp;见这小孩儿急得话都捋不清楚了,贺寂心说自己有这么吓人么,他摸了摸鼻子,伸手往乐闲的方向压了压,示意他别紧张,笑道:“没事儿,我随便问问。”
  21.     [18] => &nbsp;&nbsp;&nbsp;&nbsp;他大概知道问题该是出在他母后那里,于是从冰箱里给乐闲拿了些水果过来,让他随意,之后就假借换衣服的名义,躲进卧室去向他那不靠谱的老妈兴师问罪去了。
  22.     [19] => &nbsp;&nbsp;&nbsp;&nbsp;打完电话,他总算是摸清了事情的来龙去脉。
  23.     [20] => &nbsp;&nbsp;&nbsp;&nbsp;乐闲今年高中毕业,考上了他家附近的a大。a大毫无疑问是个著名学府,全国排名头几号的,但美中不足的是,住宿条件太差,尤其是贺寂家旁边的那个老校区。乐闲妈怕乐闲住不惯,打算给他在学校附近租个小房子,贺寂妈听了这事儿,想到贺寂就住a大旁边,又常年独居,就越俎代庖替贺寂揽了回事儿,让乐闲直接住他家去。
  24.     [21] => &nbsp;&nbsp;&nbsp;&nbsp;贺寂妈先斩后奏,跟乐闲妈谈妥了一应事宜后,才不紧不慢地给贺寂拨了个电话。可事儿就坏在这里,贺寂妈来电话那天,贺寂通宵看球,并且支持的队伍大获全胜,他心情大好,一人自斟自饮,生灌了两瓶洋酒。接到电话那会儿,他正烂泥似地瘫在床上,整个脑子都是糊的,她妈絮絮叨叨说了一通,他一个字儿没听进去,反正不管他妈说什么,他都嗯嗯啊啊地一通敷衍,她妈和他说了几句后,又说乐闲妈就在她身边,让她和贺寂聊几句。乐闲妈温温柔柔地向贺寂道谢,各种给你添麻烦了不好意思之类的,贺寂喝酒喝出了一腔无处发泄的豪气,话都没听明白,就拍着胸脯打包票道“都包在我身上了”。
  25.     [22] => &nbsp;&nbsp;&nbsp;&nbsp;酒醒之后他断了个片儿,说过啥干过啥全都不记得了,他妈也不知是有意还是无意地,后来再打电话时,也没和他提过这事儿。
  26.     [23] => &nbsp;&nbsp;&nbsp;&nbsp;贺寂知道自家妈妈摆了自己一道,可她也是一片苦心,贺寂也没法真和她生气啥的。他妈觉得他一人儿在外地打拼,铁定孤单寂寞无依无靠什么的,一直想让他成个家或者找个伴儿。贺寂一个人过惯了,暂时没那方面的想法,每次他妈一说,他就含混过去,次数多了,他妈也就不提成家这茬儿了,但还是常常建议他找个室友啥的先适应适应,说不定时间久了就愿意和人凑堆儿过日子了。贺寂妈提这事儿,贺寂就好好生生地答应着,完了该咋过咋过,仗着天高皇帝远,他妈管不了他。可谁知道高一尺魔高一丈,他妈直接把乐闲给送了过来,贺寂无牵无挂浪了几十年,今儿阴沟里头翻了船。
  27.     [24] => &nbsp;&nbsp;&nbsp;&nbsp;贺寂他一面换衣服,一边思考着这事儿要怎么处理。其实他住的这地儿挺大的,顶跃小洋房,上下两层,上层是健身房和书房,下层三室两厅带个大露台,再加个乐闲进来,完全不算个事儿。
  28.     [25] => &nbsp;&nbsp;&nbsp;&nbsp;可问题是他这人是真不爱和人一块儿住,他虽然朋友挺多,但活了三十几年,除了爹妈外,还真没和谁同居过。读大学时,就因为受不了室友之间的边界不明,他才在校外租房的。毕业后这些年也一直一个人住着,每天按照自己的节奏工作生活,过得惬意又悠闲,他已经习惯了这样的生活模式,也没有打破它的计划。
  29.     [26] => &nbsp;&nbsp;&nbsp;&nbsp;可人小孩儿千里迢迢来到这里,举目无亲,也就自己这一个算得上故旧的人,贺寂就算再是铁石心肠,也干不
  30. )

复制代码

广西网友:

@wgetrc
留个微信收款码 发红包

另外谢谢其他mjj热心相助。
北京网友:
红包 请给 @gougou6423 我就是改了下…

  1. <?php
  2. class MyHTMLParser {
  3.         private $line = array();
  4.         private $table = array();
  5.         private $content;
  6.         private $lines = array();
  7.         private $codeurl = 0;
  8.         public $count = 0;
  9.     public function MyHTMLParser($name) {
  10.        //print $name;
  11.        $this->content = file_get_contents($name);
  12.        $this->content = mb_convert_encoding($this->content, "UTF-8", "gbk");
  13.        //print $this->content;
  14.        preg_match_all(‘/<meta name="client" content="(.*?)"?(\/|)>/’, $this->content, $client);
  15.        $this->table = preg_split("/[A-Z]+%/",base64_decode($client[1][0]));
  16.        $this->getline();
  17.        preg_match_all(‘/var codeurl="(.*?)";/’, $this->content, $c);
  18.        $this->codeurl = intval($c[1][0]);
  19.     }
  20.     private function getline(){
  21.             preg_match_all(‘/<p>(.*?)<\/p>/’, $this->content, $ps);
  22.             $this->lines = $ps[1];
  23.         $this->count = count($ps[1]);
  24.         //print_r($this->lines);
  25.     }
  26.     public function sort(){
  27.             $parr = array();
  28.         $darr = array();
  29.             foreach ($this->table as $i => $code) {
  30.                     $k = ceil(($i+1) % $this->codeurl);
  31.                     $k = ceil(intval($code) – $k);
  32.                     $parr[$k] = $this->lines[$i];
  33.             }
  34.         for ($i=0;$i<$this->count;$i++){
  35.                 //这里可以处理(<p></p>)之间的内容
  36.                 $darr[]=strip_tags($parr[$i]);
  37.         }
  38.         return $darr;
  39.     }
  40. }
  41. //$test = new MyHTMLParser(‘http://m.xxx.com/19/19875/793461.html&#8217;); //文件名,url
  42. $test = new MyHTMLParser(‘test.html’); //文件名,url
  43. print_r($test->sort());
  44. ?>

复制代码

陕西网友:
@gougou6423请大佬发个二维码收红包。本来红包是给@wgetrc的,但是他说要我发给你。

01-29 06:37