抓取和分析

 更新时间:2016年11月25日 17:14  点击:1433
抓取和分析一个文件是非常简单的事。这个教程将通过一个例子带领你一步一步地去实现它。让我们开始吧!
  首先,我首必须决定我们将抓取的URL地址。可以通过在脚本中设定或通过$QUERY_STRING传递。为了简单起见,让我们将变量直接设在脚本中。
 
<?
$url = 'http://www.php.net';
?>
  第二步,我们抓取指定文件,并且通过file()函数将它存在一个数组里。
 
<?
$url = 'http://www.php.net';
$lines_array = file($url);
?>
  好了,现在在数组里已经有了文件了。但是,我们想分析的文本可能不全在一行里面。为了解这个文件,我们可以简单地将数组$lines_array转化成一个字符串。我们可以使用implode(x,y)函数来实现它。如果在后面你想用explode(将字符串变量数组),将x设成"|"或"!"或其它类似的分隔符可能会更好。但是出于我们的目的,最好将x设成空格。y是另一个必要的参数,因为它是你想用implode()处理的数组。
 
<?
$url = 'http://www.php.net';
$lines_array = file($url);
$lines_string = implode('', $lines_array);
?>
  现在,抓取工作就做完了,下面该进行分析了。出于这个例子的目的,我们想得到在<head>到</head> 之间的所有东西。为了分析出字符串,我们还需要叫做正规表达式的东西。
 
<?
$url = 'http://www.php.net';
$lines_array = file($url);
$lines_string = implode('', $lines_array);
eregi("<head>(.*)</head>", $lines_string, $head);
?>
  让我们看一下代码。正如你所见,eregi()函数按下面的格式执行:
eregi("<head>(.*)</head>", $lines_string, $head);
  "(.*)"表示所有东西,可以解释为,"分析在<head>和</head>间的所以东西"。$lines_string是我们正在分析的字符串,$head是分析后的结果存放的数组。
 
  最后,我们可以输数据。因为仅在<head>和</head>间存在一个实例,我们可以安全的假设数组中仅存在着一个元素,而且就是我们想要的。让我们把它打印出来吧。
 
<?
$url = 'http://www.php.net';
$lines_array = file($url);
$lines_string = implode('', $lines_array);
eregi("<head>(.*)</head>", $lines_string, $head);
echo $head[0];
?>
  这就是全部的代码了。


PHP 是一种服务器端的,嵌入HTML的脚本语言。PHP区别其他像客户端Javascript的地方是它的代码在服务器端执行.PHP能做什么?
  最低水平,PHP可以做任何其他CGI程序所能做的事,例如收集表格数据,生成动态页面内容,或者收发cookies.可能最强大,最有意义的特性是PHP支持大范围的数据库.书写一个支持数据库的Web 页面是难以置信的简单.
  下面是当前支持的数据库:
  Adabas D InterBase Solid
  dBase mSQL Sybase
  Empress MySQL Velocis
  FilePro Oracle Unix dbm
  Informix PostgreSQL
  PHP通过协议也支持与其他服务的"交谈",像IMAP, SNMP, NNTP, POP3, 甚至是 HTTP. 你也可以打开晦涩的 网络接口和其他协议交互.
PHP的简要历史
  1994年秋季, Rasmus Lerdorf 开始构思 PHP. 早期的非发行版本被用在他的主页上,以追踪谁在看他的在线简历. 1995年年初第一版本出台,当时PHP只被认为是个人主页开发工具.它由一个非常单纯的只能理解很少数特殊宏的分析引擎和 一些用在主页后端通用的工具组成.如留言簿,计数器和其他一些东西.这个分析器在1995年年中被重写并被命名为 PHP/FI 第二版. FI来自 Rasmus 写的另外一个包, 用于解释 html 形式的数据.他结合了个人主页工具脚本和形式解析器,并加 上mSQL支持.这样就产生 PHP/FI 了. PHP/FI以令人惊奇的步调成长,人们开始把自己的代码贡献给它.
  很难给出它的硬统计表,但可以估计在1996年末,整个世界至少有15,000个网站在用PHP/FI.到1997年年中,这个 数字已经超过50,000了. 而在此时PHP的发展也发生了变化.由Rasmus自己偏爱的和几个人开发的项目变成一个更有组织的团 体成就.Zeev Suraski和Andi Gutmans重写了解析器.这个新的解析器成为PHP版本3的基础.许多有用的代码从PHP/FI 继承到PHP3,并且很多是完全重写的.
  今天(1999年年中)不管是PHP/FI或PHP3与很多商业产品捆绑在一块,例如C2级强度的Web服务器和红帽子Linux. 根据NetCraft提供的数据推断,保守估计全世界应用PHP的网站已超过150,000个.由此看来,它比在因特网上运行Netscape 的旗舰企业服务器的站点还多.
MySQL 3.23.40 又发布了。
修正了--low-priority-updates 和 INSERT 的问题。
修正了从进程在一些特别的情况下超前主进程 22 字节的问题。
为复制增加了 slave_wait_timeout
修正了 UPDATE 和 BDB 表的问题。
修正了BDB 表使用 key parts 的问题。
修正了使用 GRANT FILE ON database.* ...的问题。
修正了 DELETE FROM table_name ... LIMIT 0 和 UPDATE FROM table_name ... LIMIT 0 不能删除或者更新任何记录的问题。
CHECK TABLE 现在检查 auto_increment column 是否包含 0。
对 mysqld 发送 SIGHUP 信号只会刷新日志,不会重启复制。
修正了解析器允许类似 1.0e1 (e 后面没有符号)浮点数的问题。
myisamchk 的 --force 参数现在更新状态。
为 mysqld 增加 --warnings 参数,如果使用这个参数 mysqld 只是输出退出连接的错误信息。
修正了没有 PRIMARY KEY 的情况下,SHOW CREATE TABLE 的问题。
修正了更改名字 innodb_unix_file_flush_method 为 innodb_flush_method 的问题。
修正了转换 UNSIGNED BIGINT 到 DOUBLE 的问题。
修正了查询 BDB 空表时的问题。
修正了使用 COUNT(DISTINCT) 和 LEFT JOIN 时,没有匹配行的问题。
删除了文档中所有有关 GEMINI 表的部分,GEMINI 不再开放源码了。
    为了理解SWITCH语句为了躲避语句冗长,知道它如何被执行的是非常重要的.SWITCH语句石一行一行     执行的(事实上,是一条语句一条语句).在开始时,没有代码被执行.仅仅当一个值于SWITCH表达式的语句的值相同的CASE语句被发现后,PHP继续执行语句直到SWITCH体的结束,或者出现了BREAK语句.如果你在一个分支语句的后面没有写BREAK语句,PHP将继续执行下面分支的语句.例如:
 
/* example 3 */
 
switch ($i) {
case 0:
print "i equals 0";
case 1:
print "i equals 1";
case 2:
print "i equals 2";
}
 
    这里,如果$i等于0,PHP将会执行所有打印语句.如果$i等于1,PHP将会执行剩下的两个打印语句,并且仅仅当$i等于2的时候,你才能得到你期望的执行结果,只有’I equals 2’被显示.因此不要在每一个分支语句的后面忘记BREAK语句(即使你在一定的环境下有可能想避免提供他们).
    一个特殊的分支是默认的分支.这个分支可以匹配任何其它分支没有匹配的事情.例如:
 
/* example 4 */
 
switch ($i) {
case 0:
print "i equals 0";
break;
case 1:
print "i equals 1";
break;
case 2:
print "i equals 2";
break;
default:
print "i is not equal to 0, 1 or 2";
}
 
    另外一个值得一提的事实是CASE表达式可以是任何计算标量类型的表达式,也就是说,整型或实型和字符型.数组和对象将不会导致PHP崩溃,但是他们没有没有任何意义.
 
REQUIRE
    REQUIRE语句使用指定的文件来代替它自己,与C语言中的#include语句非常相似。这意味着你不能把一个require()语句放在一个循环体中,并且期望它在每一次反复中都包含不同文件的内容.为了达到这个目的,可以使用INCLUDE语句。
    require ('header.inc');
     
INCLUDE
    INCLUDE语句包括和计算指定文件.
    在每次遭遇INCLUDE语句的时候都会进行一次.因此你可以在一个循环体中使用INCLUDE语句.以用来包含一些不同的文件.
如需转载,请注明出处!
用过ORACLE的人都知道,要想在ORACLE中更改表的列名和顺序可是一件很烦琐的事,下面给大家提供一种简单的方法。
SQL> select object_id from all_objects where owner='SCOTT' and object_name='T1';
OBJECT_ID
----------
6067
SQL> select obj#,col#,name from sys.col$ where obj#=6067;
OBJ# COL#
---------- ----------
NAME
------------------------------------------------------------
6067 1
ID
6067 2
NAME
SQL> update sys.col$ set name='NEW_ID' ,col#=3 where obj#=6067 and name='ID';
1 row updated.
SQL> update sys.col$ set name='MY_NAME',col#=1 where obj#=6067 and name='NAME';
1 row updated.
SQL> update sys.col$ set col#=2 where obj#=6067 and col#=3;
1 row updated.
SQL> commit;
Commit complete.
SQL> select * from scott.t1;
ID NAME
---------- --------------------
3 cheng
2 yong
1 xin
2 gototop
1 topcio
2 yongxin
1 cyx
7 rows selected.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 128159368 bytes
Fixed Size 732808 bytes
Variable Size 117440512 bytes
Database Buffers 8388608 bytes
Redo Buffers 1597440 bytes
Database mounted.
Database opened.
SQL> select * from scott.t1;
MY_NAME NEW_ID
-------------------- ----------
cheng 3
yong 2
xin 1
gototop 2
topcio 1
yongxin 2
cyx 1
7 rows selected.
到此为止我们已经把SCOTT.T1表中的列名和顺序都给该了,如果你只想改变顺序而不想改变列名,只需再进行UPDATE就可以了,之所以不能一次完成是因为SYS.COL$中COL#,NAME都是UNIQUE的。
这种方法虽然存在一定风险,但对于特别大的表效果是很明显的,而用一般的方法将需要更多的存储空间、回滚段和时间开销。

[!--infotagslink--]

相关文章

  • MYSQL事务回滚的2个问题分析

    因此,正确的原子操作是真正被执行过的。是物理执行。在当前事务中确实能看到插入的记录。最后只不过删除了。但是AUTO_INCREMENT不会应删除而改变值。1、为什么auto_increament没有回滚?因为innodb的auto_increament的...2014-05-31
  • Mysql索引会失效的几种情况分析

    索引并不是时时都会生效的,比如以下几种情况,将导致索引失效: 1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)  注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引 ...2014-06-07
  • python 爬取京东指定商品评论并进行情感分析

    本文主要讲述了利用Python网络爬虫对指定京东商城中指定商品下的用户评论进行爬取,对数据预处理操作后进行文本情感分析,感兴趣的朋友可以了解下...2021-05-28
  • Underscore源码分析

    Underscore 是一个 JavaScript 工具库,它提供了一整套函数式编程的实用功能,但是没有扩展任何 JavaScript 内置对象。这篇文章主要介绍了underscore源码分析相关知识,感兴趣的朋友一起学习吧...2016-01-02
  • Google会不会取消PR的理由分析

    Google是这样介绍PageRank的:   Google 出类拔萃的地方在于专注开发“完美的搜索引擎”,联合创始人拉里&middot;佩奇将这种搜索引擎定义为可“确解用户...2017-07-06
  • C#抓取网络图片保存到本地的实现方法

    下面小编就为大家分享一篇C#抓取网络图片保存到本地的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-25
  • Fatal error: Cannot redeclare class 原因分析与解决办法

    我使用的都是php __autoload状态自动加载类的,今天好好的程序不知道怎么在运行时提示Fatal error: Cannot redeclare class 了,看是重复定义了类,下面我来分析一下解决办...2016-11-25
  • 关于PHP文件包含一些漏洞分析

    文章简单的分析了在php文件包含时inlcude的一个漏洞分析,下面希望对大家有点用处哦。 基本的文件包含漏洞: 代码如下 复制代码 <?php include...2016-11-25
  • www.111cn.net 排名大跌分析降权原因

    我的主题爱这个站以前排名非常好,后来由于自己操作不当至今还没恢复到以后的那种好的排名,希望各位站长吸取点教训哦。 下面以我们http://www.111cn.net 为例吧,做SE...2016-10-10
  • php echo print print_r三者区别分析

    php教程 echo print print_r三者区别分析 echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用) print() 只能打印出简单类型变量的...2016-11-25
  • PHP静态分析与跨站脚本检测

    最近在看PHP静态分析与跨站脚本检测的东西,用的是维也纳大学一个博士生做出来的Pixy,这个东西是开源的,而且也作了好几年了,功能逐渐增强。现在这个3.0.3版本里...2016-11-25
  • 关于web注册页的可用性分析

      在Nielsen的可用性工程里提到可用性的其中一个原则是Errors,记得刚开博客的时候也穷举了一些关于可用性方面的文章,里面将这个errors翻译成了“少错”,实际上...2016-09-20
  • PHP session并发及session读写锁分析

    关于PHP session并发及session读写锁问题估计各大程序员都不会想到这个问题,因为一般情况我们不会使用session来做并发操作了,但有时也有可能用到,下面整理一个session并...2016-11-25
  • C#使用WebClient登录网站并抓取登录后的网页信息实现方法

    这篇文章主要介绍了C#使用WebClient登录网站并抓取登录后的网页信息实现方法,涉及C#基于会话操作登陆网页及页面读取相关操作技巧,需要的朋友可以参考下...2020-06-25
  • 最短的IE判断var ie=!-[1,]分析

    以前最短的IE判定借助于IE不支持垂直制表符的特性搞出来的。 复制代码 代码如下: var ie = !+"/v1"; 仅仅需要7bytes!参见这篇文章,《32 bytes, ehr ... 9, ehr ... 7!!! to know if your browser is IE》,讲述外国人是...2014-05-31
  • PHP抓取远程图片(含不带后缀的)教程详解

    最近在做微信登录开发时候,发现微信头像图片没有后缀名,传统的图片抓取方式不奏效,需要特殊的抓取处理。所以,后来将各种情况结合起来,封装成一个类,分享出来给大家,感兴趣的朋友们下面来一起看看吧。...2016-11-01
  • 深入分析PHP const与define使用区别

    const是用于类成员常量的定义了,定义之后不可改,而define我们定义的是全局常量了, 这样我们在其它地方访问但不能改变了,具体还有一些细节我们下面给各位列出来吧 注...2016-11-25
  • Python光学仿真数值分析求解波动方程绘制波包变化图

    这篇文章主要为大家介绍了Python光学仿真通过数值分析求解波动方程并绘制波包变化图的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助...2021-10-20
  • C#使用HtmlAgilityPack抓取糗事百科内容实例

    这篇文章主要介绍了C#使用HtmlAgilityPack抓取糗事百科内容的方法,实例分析了C#中HtmlAgilityPack的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 网站快照缓慢的原因分析

    先来看看我在网上搜索到别人说的不更新的一些原因:   1、内容质量不行,对于本博来说百分之九十以上的原创,或者您也可以说是伪原创吧,因为有些理论知识点网上存在很多,只...2016-10-10