本神奇的Perl系列为刘兴(http://deepfuture.iteye.com/)原创,未经笔者授权,任何人和机构不能转载
4.获取网页
如何取得ip来源地区?不用重新发明轮子,我们使用外部工具。
在GOOGLE搜索“ip查询”,可搜索到很多提供此项服务的网站,选择http://www.ip138.com/进行ip查询,在IP地址或者域名栏内输入221.226.19.186。IP地址做为参数通过get模式传入http://www.ip138.com/ips.asp。
通过http://www.ip138.com/ips.asp?ip= 117.32.251.242&action=2&action=2,获得对应地区。
下面, 我们试着编写Perl程序来自动完成查询IP的功能,首先要解决的问题是如何获取网页。有了LWP::Simple模块的支持,我们不用直接解析HTML协议,完成 这项工作变得十分简单。
我们使用get子程序来获取网页,该子程序会将获取的网页做为一个标量返回,我们能轻易发现,地区字符串“陕西省西安市”这个字符串位于“本站主数据:”之后,空格之前,对于某些IP地址,无法查询接入提供商,因此地区字符串也可能位于“</li>”之前。
为保证多平台字符编码兼容性,将“本站主数据:”做为变量在正则表达式中使用,程序以UTF8编码保存,使用decode('utf8',"本站主数据:")以UTF8解码。
先定义解码后的标量:
$sjts =decode('utf8',"本站主数据:");
然后再通过正则模式串/$sjts(\S+?)(<\/li>|\s)/)进行匹配。
#perl4-12.pl
use strict;
use warnings;
use LWP::Simple;
use Encode;
use Utf2Gbk;
.............
...........
$url='http://www.ip138.com/ips.asp?ip='.$ip.'&action=2&action=2';
$sjts=decode('utf8',"本站主数据:");
$page=get($url);#获取网页
if (sysisutf8()){#判断当前系统用的编码,sysisutf8是Utf2Gbk模块的导出子程序
binmode(STDOUT, ':encoding(utf8)');
}
else{
binmode(STDOUT, ':encoding(gbk)');
}
print $1 if $page=~m/$sjts(.+?)(<\/li>|\s)/;
分享到:
相关推荐
烟雾测试Perl 5 Rosettacode任务已经设置了,为什么还不设置Perl 5? 它能有多难? :-)时间线解决了现有任务的积压工作,现在在需要的地方添加了丢失的任务。 最初,针对最近发布的5.28版本的Perl进行测试。 一旦...
此次第六版涵盖了最新的Perl 5.14版本的变化。 Perl能在绝大多数平台上完成几乎所有任务,不管是简单的修修补补,还是大型完备的网络应用。《Perl语言入门》从最基础的开始教起,然后逐渐深入,让你慢慢能够自行编写...
PERL语言第六版,Perl能在绝大多数平台上完成几乎所有任务,不管是简单的修修补补,还是大型完备的网络应用
第六章哈希 什么是哈希? 访问哈希元素 哈希函数 哈希的典型应用 %env哈希 习题 第七章漫游正则表达式王国 什么是正则表达式? 使用简易模式 字符集 习题 第八章以正则表达式进行匹配 以m//进行匹配 ...
但是在2015年底6.c发行版看起来确实将要实现时,我决定花一些精力通过Rosetta-Code上的示例来学习Perl 6的当前状态(后来称为Perl 6)。 我看的第一项任务被打破了。 哦,恐怖! 检查了文档,发现了问题,心想:我...
10-8. 列出系统上的所有用户 10-9. 在目录的所有文件中查找源字串 10-10. 列出目录中所有的符号连接文件 10-11. 将目录中的符号连接文件名保存到一个文件中 10-12. 一个C 风格的for 循环 10-13. 在batch mode 中使用...
11-8. 管道输出到read中的问题 11-9. 修改当前的工作目录 11-10. 用"let"命令来作算术操作. 11-11. 显示eval命令的效果 11-12. 强制登出(log-off) 11-13. 另一个"rot13"的版本 11-14. 在Perl脚本中使用eval命令来...
Linux服务器配置与管理项目7--WWW服务器配置与管理全文共87页,当前为第6页。 2.HTTP协议 HTTP(Hyper Text Transfer Protocol)超文本传输协议,是用于从WWW服务器传输超文本到本地浏览器的传送协议。HTTP是一个...
JavaScript采用的是Perl语言正则表达式语法的一个相当完整的子集. 正则表达式的模式规范是由一系列字符构成的.大多数字符(包括所有字母数字字符)描述的都是按照字面意思进行匹配的字符.这样说来,正则表达式/java/...
它本身就是一个完整的 32 位的多用户多任务操作 系统,因此不需要先安装 DOS 或其他的操作系统(MS Windows, OS2, MINIX..)就可以进 行直接的安装。 Linux的最早起源是在1991年10月5日由一位芬兰的大学生Linux ...
玩家人数邪恶数第一个任务的玩家第二个任务第三次探索第四个任务第五个任务5 2 2 3 2 3 3 6 2 2 3 4 3 4 7 3 2 3 3 4+ 4 8 3 3 4 4 5+ 5 9 3 3 4 4 5+ 5 10 4 3 4 4 5+ 5 游戏的第一个实现很简单,特殊角色仅限于好...
第6章 自动化批量扫描 114 6.1 使用WebScarab爬行网站 115 6.2 将爬行结果转换为清单 117 6.3 减少要测试的URL 120 6.4 使用电子表格程序来精简列表 120 6.5 使用LWP对网站做镜像 121 6.6 使用wget对网站做镜像 123 ...
第6章 配置X图形界面 66 6.1 概述 66 6.2 快速解决方案 67 6.2.1 在Caldera发行版本中配置X图形 界面的准备工作 67 6.2.2 在Caldera发行版本中配置鼠标 69 6.2.3 在Caldera发行版本中配置键盘 70 6.2.4 在Caldera...
第6章 配置X图形界面 66 6.1 概述 66 6.2 快速解决方案 67 6.2.1 在Caldera发行版本中配置X图形 界面的准备工作 67 6.2.2 在Caldera发行版本中配置鼠标 69 6.2.3 在Caldera发行版本中配置键盘 70 6.2.4 在...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
1991年的夏季,也就是他购买了第一台PC机之后6个月,Linus觉得他还需要从网上下载某些文件,为此他必须读写某个磁盘。于是他又不得不写一个磁盘驱动程序,然后是一个文件系统。而一旦你有了任务切换器、文件系统和...
Of course, we could use Java (or PERL, C/C++ or what ever) code to generate HTML. There are several disadvantages to that approach: • Java programmers should develop services, not HTML. • Changes...