PHP 采集网页内容

1. phpQuery的用法

include 'phpQuery.php'; 
phpQuery::newDocumentFile('http://www.phper.org.cn'); 
echo pq("title")->text();   // 获取网页标题
echo pq("div#header")->html();  // 获取id为header的div的html内容

上例中第一行引入phpQuery.php文件,

第二行通过newDocumentFile加载一个文件,

第三行通过pq()函数获取title标签的文本内容,

第四行获取id为header的div标签所包含的HTML内容。

主要做了两个动作,即加载文件和读取文件内容。

1.1 载入文档

phpQuery::newDocument( html, contentType = null)
根据标记URL新建一个文档。如果 contentType,,text/htmlutf8phpQuery::newDocumentFile( file, $contentType = null)
根据文件新建一个文档。类似于newDocument()

phpQuery::newDocumentHTML( html, charset = ‘utf-8’)
phpQuery::newDocumentXHTML( html, charset = ‘utf-8’)
phpQuery::newDocumentXML( html, charset = ‘utf-8’)
phpQuery::newDocumentPHP( html, contentType = null)
phpQuery::newDocumentFileHTML( file, charset = ‘utf-8’)
phpQuery::newDocumentFileXHTML( file, charset = ‘utf-8’)
phpQuery::newDocumentFileXML( file, charset = ‘utf-8’)
phpQuery::newDocumentFilePHP( file, contentType)

1.2 pq()函数用法

pq()函数的用法是phpQuery的重点,主要分两部分:即选择器和过滤器

【选择器】
要了解phpQuery选择器的用法,建议先了解jQuery的语法
最常用的语法包括有:
pq(‘#id’):即以#号开头的ID选择器,用于选择已知ID的容器所包括的内容
pq(‘.classname’):即以.开头的class选择器,用于选择class匹配的容器内容
pq(‘parent > child’):选择指定层次结构的容器内容,如:pq(‘.main > p’)用于选择class=main容器的所有p标签
更多的语法请参考jQuery手册

【过滤器】
主要包括::first,:last,:not,:even,:odd,:eq(index),:gt(index),:lt(index),:header,:animated等
如:
pq(‘p:last’):用于选择最后一个p标签
pq(‘tr:even’):用于选择表格中偶然行

1.2.1 pq(); 相当于 jQuery的$();。它主要完成三件事情:

  1. 载入标记资源:
输入到载入的文档: 
对于最开始输入的字符串不接收文本类型的节点:pq('<div/>')$pq->getDocumentID()根据ID载入到文档: pq('<div/>', $pq->getDocumentID())
根据DOM节点的归属将同样的文档载入:pq('<div/>', DOMNode)
从phpQuery 对象载入文档: pq('<div/>', $pq)
  1. 运行查询
// 根据最后一个选择的文档执行查询:pq('div.myClass')
// 根据$pq->getDocumentID()的ID从文档中进行查询:pq('div.myClass', $pq->getDocumentID())
// 在同样的文档上根据DOM节点的归属进行查询并且使用节点作为查询的根节点:pq('div.myClass', DOMNode)
// 在文档上使用phpQuery对象进行查询
// 同时使用对象的栈作为根节点进行查询: pq('div.myClass', $pq) 
  1. 使用phpQuery对象对DOM节点进行原型化操作
    foreach(pq(‘li’) as li)// li是纯DOM节点, 将它变为phpQuery对象: pq($li);

选择器
选择器是类似于jQuery接口的一个核心。大多数CSS3语法已经被采用(和jQuery保持同步)。

示例
pq(“.class ul > li[rel=’foo’]:first:has(a)”)->appendTo(‘.append-target-wrapper div’)->…

基础
#id 根据给定的ID属性匹配单个元素。
element 根据给定的名称匹配所有符合的元素。
.class 根据给定的class匹配所有的元素。
* 选择所有元素。
selector1, selector2, selectorN 根据所有制定的选择器匹配结合结果。

层级 
ancestor descendant 匹配由先祖指定的元素的后代指定的所有后代元素。
parent > child 匹配由父元素指定的子元素指定的所有子元素。
prev + next 根据指定的"next"和指定的"prev"匹配所有的下一个元素。
prev ~ siblings 匹配根据"prev" 元素的 所有相邻元素。

基础过滤 
:first匹配第一个被选择的元素。
:last 匹配最后一个被选择的元素。
:not(selector) 匹配所有不是被选择的元素。
:even 匹配所有被选择的偶数元素,0索引。
:odd 匹配所有被选择的奇数元素,0索引。
:eq(index) 匹配等同于给定的索引的元素。
:gt(index) 匹配大于给定的索引的元素。
:lt(index) 匹配小于给定的索引的元素。
:header 匹配所有header元素,如h1,h2,h3等。
:animated 匹配正在进行动画效果的元素。

文本过滤 
:contains(text) 匹配包含指定文本的元素。
:empty 匹配所有无子节点的元素(包括文本节点)。
:has(selector) 匹配至少包含一个对于给定选择器的元素。
:parent 匹配所有父元素 - 拥有子元素的,包括文本。

属性过滤 
[attribute] 匹配给定属性的元素。
[attribute=value] 匹配给定属性等于确定值的元素。
[attribute!=value] 匹配给定属性不等于确定值的元素。
[attribute^=value] 匹配给定属性是确定值开始的元素。
[attribute$=value] 匹配给定属性是确定值结尾的元素。
[attribute*=value] 匹配给定属性包含确定值的元素。
[selector1selector2selectorN] 匹配给定属性并且包含确定值的元素。

子元素过滤 
:nth-child(index/even/odd/equation) 匹配所有是父元素的第n个的子元素,或者是父元素的偶数或者奇数子元素。

:first-child 匹配所有是父元素的第一个的子元素。
:last-child 匹配所有是父元素的最后一个的子元素。
:only-child 匹配所有是父元素唯一子元素的子元素。

表单 
:input 匹配input, textarea, select和button元素。
:text 匹配所有类型为text的input元素。
:password 匹配所有类型为password的input元素。
:radio 匹配所有类型为radio的input元素。
:checkbox 匹配所有类型为checkbox的input元素。
:submit 匹配所有类型为submit的input元素。
:image 匹配所有类型为image的input元素。
:reset 匹配所有类型为reset的input元素。
:button 匹配所有类型为button的input元素和button元素。
:file 匹配所有类型为file的input元素。
:hidden 匹配所有类型为hidden的input元素或者其他hidden元素。

表单过滤 
:enabled 匹配所有可用元素。
:disabled 匹配所有不可用元素。
:checked 匹配所有被勾选的元素。
:selected 匹配所有被选择的元素。
方法

示例
pq('a')->attr('href', 'newVal')->removeClass('className')->html('newHtml')->...

Attr
attr($name) 访问第一个给名称的元素的属性。这个方法可以很轻易地取得第一个匹配到的元素的属性值。如果这个元素没有对应名称的属性则返回undefined。

attr($properties) 对于所有匹配到的元素设置对应属性。
attr($key, $value) 对于匹配到的元素设置一个属性和对应值。
attr($key, $fn) 对于匹配到的元素设置一个属性和需要计算的值。
removeAttr($name) 对匹配到的元素移除给定名称的属性。

Class
addClass($class) 对匹配到的元素添加一个给定的类。
hasClass($class) 如果有至少一个匹配到的元素包含给定的类则返回true。
removeClass($class) 对匹配到的元素移除给定名称的类。
toggleClass($class) 对匹配到的元素,如果类不存在则添加,如果存在则移除。

HTML
html() 获取第一个匹配到的元素的html内容(innerHTML)。这个方法不适用于XML文本(但适用于XHTML。)
html($val) 对匹配到的元素设置html内容。这个方法不适用于XML文本(但适用于XHTML。)

Text 
text() 获取匹配到的所有元素的文本内容。
text($val) 对匹配到的所有元素设置文本内容。

Value 
val() 获取匹配到的第一个元素的value属性的值。
val($val) 对匹配到的元素设置value值。
val($val) 所有的Checks, selects, radio buttons, checkboxes,和select options都会设置相应给定的值。

@ 采集代理ip

require_once(dirname(__FILE__).'/include/phpQuery.class.php');
/**
 * 采集代理IP
 */
for($i=1;$i<=3;$i++){
    $fetchIpUrl = 'http://www.xicidaili.com/nn/'.$i;
    phpQuery::newDocumentFile($fetchIpUrl);
    $ipstr        = pq("tr");
    foreach($ipstr as $key=>$iplist) {
        $ip = trim(pq($iplist)->find('td:eq(1)')->text());
        if($ip){
            $ipArr[] = $ip;
            $portArr[] = trim(pq($iplist)->find('td:eq(2)')->text());
        }
    }
}
echo "<pre>";
var_dump($ipArr);
var_dump($portArr);
exit;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值