PHP采集利器:phpQuery,像jQuery一样轻松采集内容

phpQuery是基于php5新添加的DOMDocument。而DOMDocument则是专门用来处理html/xml。它提供了强大 xpath选 择器及其他很多html/xml操作函数,使得处理html/xml起来非常方便。那为什么不直接使用呢?这个,去看一下官网的函数列表 就知道了,如果 对自己的记忆力很有信心, 不妨一试。

采集是一个蛋疼的活,HTML的采集烦躁啊,对于html页面,不应该使用正则的原因主要有3个

1、编写条件表达式比较麻烦 
尤其对于新手,看到一堆”不知所云”的字符评凑在一起,有种脑袋都要炸了的感觉。如果要分离的对象没有太明显的特征,正则写起来更是麻烦。

2、效率不高 
对于php来说,正则应该是没有办法的办法,能通过字符串函数解决的,就不要劳烦正则了。用正则去处理一个30多k的文件,效率不敢保证。

3、有phpQuery 
如果你使用过jQuery,想获取某个特定元素应该是轻而易举的事情,phpQuery让这成为了可能。

几个简单的例子

获取蓝色理想最热的招聘职位

1 <?    
2     include 'phpQuery.php';    
3     phpQuery::newDocumentFile('url地址。。。');    
4     $companies = pq('#hotcoms .coms')->find('div');    
5     foreach($companies as $company)    
6     {    
7        echo pq($company)->find('h3 a')->text()."<br>";    
8     }   

小结

pq()就像jQuery里的$()

基本上jQuery的选择器都可以用在phpQuery上,只要把’.'变成’->’

phpQuery提供了好几种载入文件的方法,有的使用字符串,有的使用文件(包括url),选 择的时候要注意


下载地址:

http://phpquery.googlecode.com/files/phpQuery-0.9.5.386.zip

发布了430 篇原创文章 · 获赞 415 · 访问量 925万+
展开阅读全文

PHP Query POST foreach仅显示表单中80个选项中的77个

02-28

<div class="post-text" itemprop="text"> <p>I have a form that queries from a mysql database. This specific one outputs 79 lines. When I submit and then try to split with foreach() into an array it will max out at 77 lines. No matter which parts I make active and even adding new ones.</p> <pre><code>$counterVar=0; foreach($_POST['count'] as $row=>$value) { if(number_format(($_POST['partsprice'][$row] * $_POST['new_qty'][$row]), 2, '.', '') > '0.00'){ //$row_data[] = "(DEFAULT, '".$count[$row]."', '".$rma[$row]."', '".$ln[$row]."', '0', '".$item_key[$row]."', '".$qty[$row]."', '".$part_n[$row]."', '".$desc[$row]."', '".number_format($part_price1[$row], 2, '.', '')."', '".number_format($roll_out1[$row], 2, '.', '')."', '".number_format(($part_price1[$row] * $qty[$row]), 2, '.', '')."', '".number_format(($roll_out1[$row] * $qty[$row]), 2, '.', '')."', '".$cost_type[$row]."', '".$stkrm[$row]."', '".$bin[$row]."','5')<BR>"; $row_data[] = "(DEFAULT, '".$_POST['count'][$row]."', '".$_POST['rma'][$row]."', '".$_POST['linenum'][$row]."', '0', '".$_POST['item_key'][$row]."', '".$_POST['new_qty'][$row]."', '".$_POST['part_num'][$row]."', '".$_POST['part_desc'][$row]."', '".number_format($_POST['partsprice'][$row], 2, '.', '')."', '".number_format($_POST['rolloutprice'][$row], 2, '.', '')."', '".number_format(($_POST['partsprice'][$row] * $_POST['new_qty'][$row]), 2, '.', '')."', '".number_format(($_POST['rolloutprice'][$row] * $_POST['new_qty'][$row]), 2, '.', '')."', '".$_POST['cost_type'][$row]."', '".$_POST['stkrm'][$row]."', '".$_POST['bin'][$row]."','5')<BR>"; } $counterVar++; } </code></pre> <p>Update code</p> <pre><code>$counterVar = 0; $row_data = []; $aEach = isset($_POST['count']) ? (array)$_POST['count'] : []; foreach($aEach as $row => $value) { $fPartsPrice = isset($_POST['partsprice'][$row]) ? (float)$_POST['partsprice'][$row] : 0; $fNewQnty = isset($_POST['new_qty'][$row]) ? (float)$_POST['new_qty'][$row] : 0; if(floatval($fPartsPrice * $fNewQnty) > 0) { $row_data[] = "(DEFAULT, '".$_POST['count'][$row]."', '".$_POST['rma'][$row]."', '".$_POST['linenum'][$row]."', '0', '".$_POST['item_key'][$row]."', '".$_POST['new_qty'][$row]."', '".$_POST['part_num'][$row]."', '".$_POST['part_desc'][$row]."', '".number_format($_POST['partsprice'][$row], 2, '.', '')."', '".number_format($_POST['rolloutprice'][$row], 2, '.', '')."', '".number_format(($_POST['partsprice'][$row] * $_POST['new_qty'][$row]), 2, '.', '')."', '".number_format(($_POST['rolloutprice'][$row] * $_POST['new_qty'][$row]), 2, '.', '')."', '".$_POST['cost_type'][$row]."', '".$_POST['stkrm'][$row]."', '".$_POST['bin'][$row]."','5')<BR>"; } $counterVar++; } $values=implode(",",$row_data); echo $values; echo "<br>"; echo 'items: '.count($row_data).'<br />'; echo 'counter: '.$counterVar.'<br />'; ` </code></pre> </div> 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览