2011-03
19

见识巨图

By xrspook @ 22:36:34 归类于: 烂日记

吹水一旦开始就会一发不可收拾,所以如何才能把握好吹水与思考的度呢?不容易啊不容易。

今天网友给我发了个3744*5616(2100万像素)的图片,足足19.2MB!我孤陋寡闻,没见过这么大的人物图,分辨率是240 DPI的,让人有大开眼界的感觉,用ACDSee加载就需要2.3秒,于是图片变成了真人大小那么恐怖,一条毛一粒豆豆都看得清清楚楚。看看我多么落后啊!我out了呀!这显然不是出于一个普通相机也不是出于一个普通人之手,所以,到底网友们是怎么找到这些专业级的studio照片的呢?真牛啊~~~ 不过回头想想,普通人真不需要那么大啦,照片再高清再大,放在屏幕里如果要缩小看的话还是会不爽。任何事适度就好。上星期我还在研究如何把大图压缩,这个星期我就见识到如此“庞大”的巨图。简单来说,我被震惊了,不过,震惊归震惊,震惊一次后往后就淡定了。

昨晚2点多接近3点才睡觉,今天早上8点起来,一整天都是游云恍惚状态,聊天时经常打错字。

所以呢,早点睡,必须早点睡,这周我还有很多任务要完成,所以,为了明天的努力,今天我得先储备了。

从前,周末是用来睡觉的,现在,周末是用来打字的,囧。

2010-11
26

再谈php正则提取图片地址

By xrspook @ 21:46:54 归类于: 烂日记

前天写了小谈php正则提取图片地址,但其实,提取src=里面的图片地址还不足够,因为不能保证那个地址一定是绝对地址,完全的地址,如果那是相对的呢?如果地址诸如:

albums/Candids/thumb_P1050338.jpg
/content/media/touts/5271608/5271654/15320982

那该如何是好?

有时在这些地址前面需要加http://example1.com/,有些甚至要加http://example1.com/example2/…/于是,要写出出一种法则符合所有要求,简直是天方夜谭。只能见机行事对症下药。有时,需要从前面动刀,有时需要从后面砍断。

今天,我惊讶地知道了一个道理,原来http://example.com/http://example.com//////是一样的!

http://img3.douban.com/pics/nav/lg_main_a6.png

http://img3.douban.com////pics////nav///lg_main_a6.png

最终你都能到达

于是,对于一开始提到的两个相对地址如果要强行加入某前缀恢复成绝对地址的话,也不管前面有没有“/”,只管加一个“/”就好,“有杀错,没放过”嘛,多一个显示仍会正常,但少一个“/”,嘿嘿,你就别想成功了。开始的时候我还没意识到这种东西,复制了一大段代码,把一样的东西硬生生弄两份,一份加“./.”,一份不加。我这个火星来的,浪费时间了。

放出2个地址,公测一下网页获取图片的情况:

针对任何网页,需要登入的除外:http://xyark.serw5.com/img.php
针对Coppermine Photo Gallery系统:http://xyark.serw5.com/g.php(如果你认为弹出原图的js页面也需要的话,我只好囧你了)

普页是个对抓取任何图片的尝试,系统专页是为了展示什么叫做具体情况具体分析。试过的童鞋会知道,普页对某些使用Coppermine Photo Gallery系统的网站是行不通的,原因何在?就是那个前缀搞的鬼!但系统专页就能很好地避开了这个问题。

如果大家在测试时发现任何bug,欢迎留言告知。请低调测试,谢谢合作。

注:以上话题纯粹出于就正则谈正则,光技术谈技术,不可作非正当用途。若非正当使用而引发任何杯具、餐具本人概不负责。

2010-11
24

小谈php正则提取图片地址

By xrspook @ 22:34:32 归类于: 烂日记

迷上了正则,不断尝试着新花招,首先感谢TNA的非完全输出RSS,然后再次感谢SH的强迫性学习。没有TNA,我不会去看正则,更不知道世界上有种这么牛的表达式;不是SH的死活说他不懂不知道,我也不会硬着头皮去琢磨,去改进。达到同一个目的,正则的表达方式可以不唯一,没有做不到,只有你没想到。可以这样说吧,正则就是玩设定规律,我大爱这种东西。没有比设定规律筛选东西更让我兴奋、感到awesome的了。

分享一下在php环境下使用正则提取图片地址的一些小心得:

图片网址规范的html代码无非就是

<img style="囧1" title="囧2" src="囧3" alt="囧4" width="囧5" height="囧6" />

囧1和囧2是非必需的,若要通过XHTML认证囧4、囧5、囧6必不可少,囧3是核心内容,当然就不能少了。

就正则谈正则的话,我写出的最短匹配是

(?<=img.+?src=”).*?(?=”)

不过,这条在php里不行,会出现:

Warning: preg_match_all() [function.preg-match-all]: Compilation failed: lookbehind assertion is not fixed length at offset *** in ***

纠结了很久,都不行,原因何在呢?试了很多次,终于发现问题在(?<=img.+?src=”)这个零宽断言里,在php中,零宽断言里不支持类似“*”、“+”这些无限次的东西,于是报错了,把“.+?”改为定长就好。不过,要“img”和“src=”之间定长基本上是不可能的。通常,图片地址的img和src只会相隔一个很简单的空格,但不排除某些情况在src之前,img后有alt、titlte等东西。

所以

(?<=img.src=”).*?(?=”)

(?<=img\ssrc=”).*?(?=”)

可能可以,但不保证100%没问题。

你也许会问,单纯

(?<=src=”).*?(?=”)

不行吗?通常情况,可以,但,搜索过页面的盆友应该知道,除了图片地址用src开头以外,javascript地址也用src开头!而且,太多神通广大的不可预知因素隐含其中,于是这个貌似很简短完美的写法就行不通了。

你又或许会问,聪明简短的不行,我把图片的后缀列出来,总该可以了吧,如

(?<=src=”).*?\.(jpg|jpeg|gif|png|bmp|JPG|JPEG|GIF|PNG|BMP)

的确,这个写法实在是很老实,不过,你见过没有后缀的图片?wwe.com有很多这种例子呢

RAW http://us.wwe.com/content/media/images/Headers/15559182
SmackDown http://us.wwe.com/content/media/images/Headers/15854138
NXT http://us.wwe.com/content/media/images/Headers/15929136
Superstars http://us.wwe.com/content/media/images/Headers/15815850

上面的网址都是图片,但都没有传统后缀,你老实也没用,还是不能获取到它们。

怎么办呢?还可以这样

<img(.*?)src=”(.*?)(?=”)

和上面的表达式不同,这次的结果中array[0]的内容不是我们想要的,我们要的图片地址在array[2]里。为什么呢?因为我们用了2个(.*?),每个“()”的东西会自动存在一个组里,而array[0]代表结果的汇总,array[1]包含了img和src里的所有东西,array[2]才轮到我们想要的图片地址。这种匹配方法,既能匹配有传统后缀的图片,也能匹配一些无后缀的图片文件,同时又不会杀错其它src=文件。个人感觉还是不错的,呵呵。当然了,如果你还有更好的建议,请马上留言,全球人民都会感谢你!

你到底要什么样的图片,是固定格式还是其它?得具体情况具体分析呢。

我的建议是:

如果你要的图片地址的格式是img空格src=的,请使用:(?<=img.src=”).*?(?=”),数组唯一,你懂的。

否则,请使用<img(.*?)src=”(.*?)(?=”),记得留意有用内容所在的数组位置哦!

2010-11
19

略懂正则后

By xrspook @ 23:59:55 归类于: 烂日记

花费了好几个小时学习正则表达式(Regular Expression),简称regex。非常非常强大的一个程序员利器,在此,再次感谢SH童鞋的强迫性学习。在多种程序语言里正则都通用,用简单的符号却能组合出任何你需要的结果。看着那堆“\/#$&*^()_+|{}<>?=.”等实在会把人弄疯掉,再加上26个英文字母的大小写组合,宇宙就能编出来!这让我想起了大学时期老师教的文献检索,在说到英文数据库的时候就是这般*来?去的,但和相比,英文数据库的搜索方法只是个非常非常的简化版的正则,小儿科而已。

简单看了几个正则教程,最终觉得还是要自己打开个正则测试工具(如Windows下的Regex Tester)实操。

经过还不算太辛苦的挣扎,对TNA而言,我要提取的信息可以用以下正则实现:

(?<=href=”).*\.jpg.php

说明:“(?<=囧)”,定位在囧后;“href=””,一个字符串,也就相当于囧;“.*”,别以为“.”是连接符“*”是任意字符,恰恰相反,“.”代表除换行符以外的任意字符,“*”代表前面的东西,也就是除换行符以外的任意字符可以重复零次或更多次;“\.”,其实就代表了“.”,在正则里,“.”必须用“\”转义;“jpg.php”我的原意是一个字符串,但在正则里,看来“.”也不会被看作“.”,而代表一个除换行符以外的任意字符,也无伤大雅,毕竟我希望的“.”也在正则“.”包含的范围内。

除了用上面的“(?<=href=”).*\.jpg.php”以外,还能把正则改写为:

(?<=href=”).*\.jpg\.php /*把“.”全部正确转义,不打擦边球*/
(?<=href=”).*\b.jpg.php\b /*把“.jpg.php”看作一个单词,很自然地把其中的“.”一般字符化了,“\b”用于匹配单词的开始或结束*/

具体在YARK的正则是这般写的

preg_match_all('/(?< =href=").*\.jpg.php/', $data, $log);
囧囧囧囧
for($i=0;$i<count($log[0]);$i++) 
{  	
	<?php echo '囧'.$log[0][$i].'囧' ?>			
}

说明:由于我的正则表达式里只有一个未知数,也就是“.*”折腾出来的内容,所以,正则结果在新建的$log将是一个二维数组,具体内容将在[0][囧]里显示。如果,正则里有多个未知数,未知数就会分别出现在[0][囧0]、[1][囧1]、[2][囧2]等等里面了。得打一套“组合拳”才能把它们拼凑在一起。

正则搞定了,YARK的TNA瓶颈当然就没问题了啦!

******************* YARK专栏 *******************
2010-11-19
update
* 改进TNA功能,不再依赖页面提供的rss而是自编正则表达式,提取页面信息,再分析出图片地址
bug
* 暂无新发现
plan
* 留个门,对付任何规则资源(正则是强大的,就看你怎么用了)
******************* YARK专栏 *******************

自觉通过自学又提升一个矮矮的层次了。

2010-11
16

激情与神经病

By xrspook @ 23:30:47 归类于: 烂日记

昨天19977里有人提出图片区可否增加TNA的官图,其实如果TNA不是BT的话,贴与不贴只是个习惯的问题,但是TNA的图片很BT,右键还不能保存的那种。

首先Photo Galleries使用的是近似框架形式的大概js手段,按链接是看不到网址改变的,不过,我的癖好是“在新标签页中打开”,打开后,网址又见变化了。这是第一个手段,算是很一般。

然后,重头戏,TNA的图片全部采用.php保护,所有图片的格式都被强制变成了***.jpg.php,Firefox下右键还不能保存到图片,保护严密。还记得之前2次PPV都把我害得几近手抽筋。

TNA的图片页面很是邪恶,但它给出了订阅按钮,也就是说页面是标准rss化的。rss意味着什么?rss就意味着XML,而且它的rss还是全部输出的类型,一页的rss就能输出整个系列的全部内容。刚刚熟悉了XML的格式化和信息提取,再次让我碰上新朋友,无比的兴奋。经过不太折腾的尝试后,也居然把从前的大敌TNA的图片给扯下马来了。内牛满面。

再次炫耀一下(WWE + TNA):http://xyark.serw5.com/

今天发现20101115RAW某些页面居然无法输出,研究了一个晚上,SH最后终于得出结论!title信息里有个“&”,格式化XML时受阻,因为“&”这东西太敏感了,是不允许当作“and”的意思出现的,所以会出现输出中断。解决办法如下:

/*$data = str_replace(“\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\t\r\n\r\n\r\n\t\r\n\r\n\r\n\t\r\n\r\n\r\n\r\n< ?xml version=\”1.0\” encoding=\”UTF-8\”?>”, “< ?xml version=\”1.0\” encoding=\”UTF-8\”?>”, $data); 注:第一个版本的YARK是不是很笨,呵呵呵*/
$data = str_replace(“\r\n”, “”, $data);
$data = str_replace(“\t”, “”, $data);
$data = str_replace(“&”, “&amp;”, $data);
// $data = str_replace(“&”, “囧”, $data); 注:对付“&”的一个“好”方法,先囧来
$data = XML_unserialize($data);
// $data = str_replace(“囧”, “&”, $data); 注:对付“&”的一个“好”方法,再囧去

感觉自己处于见人杀人,见鬼抓鬼的状态。这就是激情了,不过正因为这些变态的激情,让我神经病了。昨晚凌晨1点多才上床睡觉,还兴奋得睡不着。今天,也已经不早了,我还在写。

Pasion make me crazy, good or not?

© 2004 - 2024 我的天 | Theme by xrspook | Power by WordPress