`
deepfuture
  • 浏览: 4334782 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:79435
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:68412
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:101532
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:281270
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:14619
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:65612
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:31336
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:45222
社区版块
存档分类
最新评论

神奇的perl-第六个任务(8)

阅读更多

本神奇的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)/;


 

分享到:
评论

相关推荐

    Rosettacode-Perl-Smoke:烟雾测试Perl Rosettacode任务

    烟雾测试Perl 5 Rosettacode任务已经设置了,为什么还不设置Perl 5? 它能有多难? :-)时间线解决了现有任务的积压工作,现在在需要的地方添加了丢失的任务。 最初,针对最近发布的5.28版本的Perl进行测试。 一旦...

    Perl语言入门(第六版)

    此次第六版涵盖了最新的Perl 5.14版本的变化。 Perl能在绝大多数平台上完成几乎所有任务,不管是简单的修修补补,还是大型完备的网络应用。《Perl语言入门》从最基础的开始教起,然后逐渐深入,让你慢慢能够自行编写...

    Perl语言入门_中文版_第六版

    PERL语言第六版,Perl能在绝大多数平台上完成几乎所有任务,不管是简单的修修补补,还是大型完备的网络应用

    Perl语言入门(第五版-中文版).pdf

    第六章哈希 什么是哈希? 访问哈希元素 哈希函数 哈希的典型应用 %env哈希 习题 第七章漫游正则表达式王国 什么是正则表达式? 使用简易模式 字符集 习题 第八章以正则表达式进行匹配 以m//进行匹配 ...

    Rosettacode-Raku-Smoke:烟雾测试Raku(以前是Perl 6)Rosettacode任务

    但是在2015年底6.c发行版看起来确实将要实现时,我决定花一些精力通过Rosetta-Code上的示例来学习Perl 6的当前状态(后来称为Perl 6)。 我看的第一项任务被打破了。 哦,恐怖! 检查了文档,发现了问题,心想:我...

    Advanced Bash-Scripting Guide <>

    10-8. 列出系统上的所有用户 10-9. 在目录的所有文件中查找源字串 10-10. 列出目录中所有的符号连接文件 10-11. 将目录中的符号连接文件名保存到一个文件中 10-12. 一个C 风格的for 循环 10-13. 在batch mode 中使用...

    Linux高级bash编程

    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服务器配置与管理.pptx

    Linux服务器配置与管理项目7--WWW服务器配置与管理全文共87页,当前为第6页。 2.HTTP协议 HTTP(Hyper Text Transfer Protocol)超文本传输协议,是用于从WWW服务器传输超文本到本地浏览器的传送协议。HTTP是一个...

    正则表达式

    JavaScript采用的是Perl语言正则表达式语法的一个相当完整的子集. 正则表达式的模式规范是由一系列字符构成的.大多数字符(包括所有字母数字字符)描述的都是按照字面意思进行匹配的字符.这样说来,正则表达式/java/...

    Linux操作系统基础教程

    它本身就是一个完整的 32 位的多用户多任务操作 系统,因此不需要先安装 DOS 或其他的操作系统(MS Windows, OS2, MINIX..)就可以进 行直接的安装。 Linux的最早起源是在1991年10月5日由一位芬兰的大学生Linux ...

    avalon-arthur:AI模拟IRC游戏

    玩家人数邪恶数第一个任务的玩家第二个任务第三次探索第四个任务第五个任务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 游戏的第一个实现很简单,特殊角色仅限于好...

    WEB安全测试

    第6章 自动化批量扫描 114 6.1 使用WebScarab爬行网站 115 6.2 将爬行结果转换为清单 117 6.3 减少要测试的URL 120 6.4 使用电子表格程序来精简列表 120 6.5 使用LWP对网站做镜像 121 6.6 使用wget对网站做镜像 123 ...

    LINUX安装与配置简明手册

    第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...

    linux安装与配置简明手册

    第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 在...

    java开源包1

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    Linux最早是Linus Torvalds在1991年开始设计开发

    1991年的夏季,也就是他购买了第一台PC机之后6个月,Linus觉得他还需要从网上下载某些文件,为此他必须读写某个磁盘。于是他又不得不写一个磁盘驱动程序,然后是一个文件系统。而一旦你有了任务切换器、文件系统和...

    外文翻译 stus MVC

    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...

Global site tag (gtag.js) - Google Analytics