分享下页面关键字抓取components.arrow.com站点代码
2015-01-24信息快讯网
这篇文章主要介绍了分享下页面关键字抓取components.arrow.com站点代码的相关资料,需要的朋友可以参考下
<?php /** * HOST: components.arrow.com */ //set_time_limit(0); // base function function curl_get($url, $data = array(), $header = array(), $timeout = 15, $port = 80, $reffer = '', $proxy = '') { $ch = curl_init(); if (!empty($data)) { $data = is_array($data)?http_build_query($data): $data; $url .= (strpos($url,'?')? '&': "?") . $data; } curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); curl_setopt($ch, CURLOPT_POST, 0); curl_setopt($ch, CURLOPT_PORT, $port); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); //是否抓取跳转后的页面 $reffer && curl_setopt($ch, CURLOPT_REFERER, $reffer); if($proxy) { curl_setopt($ch, CURLOPT_PROXY, $proxy); curl_setopt($ch, CURLOPT_PROXYPORT, 1723); curl_setopt($ch, CURLOPT_PROXYUSERPWD,"andhm001:andhm123"); } $result = array(); $result['result'] = curl_exec($ch); if (0 != curl_errno($ch)) { $result['error'] = "Error:\n" . curl_error($ch); } curl_close($ch); return $result; }
function curl_post($url, $data = array(), $header = array(), $timeout = 15, $port = 80) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); curl_setopt($ch, CURLOPT_PORT, $port); !empty ($header) && curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $result = array(); $result['result'] = curl_exec($ch); if (0 != curl_errno($ch)) { $result['error'] = "Error:\n" . curl_error($ch); } curl_close($ch); return $result; } /** * 获取列表页的html源码 * @param string $keywords 搜索关键字 * @param int $start 开始记录数 * @return boolean|array */ function getListHtml($keywords, $start = 0) { if ($start < 0) { return false; } $postData = array( 'search_token' => $keywords, 'start' => $start, 'limit' => 100, ); $result = curl_post('http://components.arrow.com/part/search/' . $keywords, http_build_query($postData)); if ( isset($result['error']) ) { return false; //exit($result['error']); } $result = $result['result']; return $result; } /** * 获取列表页 连接href * @param string $html html源码 * @return array */ function getListHref($html) { $pattern = '/<td\s+class="col_mfr_part_num"><a\s+href="(.[^>]+)">/isU'; if (preg_match_all($pattern, $html, $matches)) { return $matches[1]; } else { // 没有匹配项 return array(); } } /** * 获取下一页数字start * @param string $html html源码 * @return number */ function getListNextPage($html) { $pattern = '/<script\s+language="javascript">buildPagination\(\'\d+\',\'\d+\',\'(\d+)\',\d+\);<\/script>/isU'; if (preg_match($pattern, $html, $matches)) { return intval($matches[1]); } else { return -1; } } /** * 获取列表也所有的详细列表 * @param string $keywords 搜索关键字 * @return boolean|array */ function getListHrefAll($keywords) { if (empty($keywords)) { return false; } $html = getListHtml($keywords); $hrefList = getListHref($html); if (empty($hrefList)) { // 没有结果 return array(); } $nextPage = getListNextPage($html); $loop =0; while ($nextPage > 0) { $html = getListHtml($keywords, $nextPage); $tmpHrefList = getListHref($html); $hrefList = array_merge($hrefList, $tmpHrefList); $nextPage = getListNextPage($html); $loop ++; } return $hrefList; } /** * 获取详情页信息 * @param string $url url地址 * @return array() */ function getDetail($url) { if ( empty($url) ) { return false; } $host = 'http://components.arrow.com'; $url = $host . $url; $result = curl_get($url); if ( isset($result['error']) ) { return array(); //exit($result['error']); } $html = $result['result']; $result = array( 'sup_part' => '', // 供应商型 'sup_id' => '', // 供应商ID 'mfg_part' => '', // 制造商型号 'mfg_name' => '', // 制造商名称 'cat_name' => '', // 分类名称 'para' => '', // 属性 'desc' => '', // 描述 'pdf_url' => '', // PDF地址 'sup_stock' => '', // 库存 'min_purch' => '', // 最小订购量 'price' => '', // 价格 'img_url' => '', // 图片地址 'createtime' => '', // 创建时间 'datacode' => '', // 批号 'package' => '', // 封装 'page_url' => '', // 页面地址 ); // mfg_part $pattern = '/<li>[\s\n]*<strong>Part No:\s*<\/strong>(.+)<\/li>/isU'; if (preg_match($pattern, $html, $matches)) { $result['mfg_part'] = trim($matches[1]); } else {file_put_contents('page.txt', $html);die('xxx'); return array(); } // mfg_name $pattern = '/<li>[\s\n]*<strong>Manufacturer: <\/strong>(.+)<\/li>/isU'; if (preg_match($pattern, $html, $matches)) { $result['mfg_name'] = trim($matches[1]); } // cat_name $pattern = '/displayCategory\(\'(.[^\']+)\'\);/isU'; if (preg_match($pattern, $html, $matches)) { $result['cat_name'] = trim($matches[1]); $result['cat_name'] = str_replace('|', '>', $result['cat_name']); } // para $tablepattern = '/<table\s+id="part_specs".[^>]*>(.+)<\/table>/isU'; if (preg_match($tablepattern, $html, $matches)) { $pattern = '/<tr>[\s\n]*<td><strong>(.+)<\/strong><\/td><td>(.+)<\/td>[\s\n]*<\/tr>/isU'; if (preg_match_all($pattern, $matches[1], $matches)) { foreach($matches[1] as $k=>$v) { $v = trim($v); if ('Package Type' == $v) { $result['package'] = trim($matches[2][$k]); continue; } $result['para'][$v] = trim($matches[2][$k]); } } } // desc $pattern = '/<div\s+id="part_title">.+<h4>(.+)<\/h4>[\s\n]*<\/div>/isU'; if (preg_match($pattern, $html, $matches)) { $result['desc'] = trim($matches[1]); } // pdf_url $pattern = '/<li\s+class="datasheet">[\s\n]*<strong>Datasheet:<\/strong><a\s+href="(.[^"]+)"/isU'; if (preg_match($pattern, $html, $matches)) { $result['pdf_url'] = $host . trim($matches[1]); } // sup_stock $pattern = '/<td\s+id="inv_1"\s+class="li_inv">([\d,]+)<\/td>/isU'; if (preg_match($pattern, $html, $matches)) { $result['sup_stock'] = trim($matches[1]); $result['sup_stock'] = str_replace(',', '', $result['sup_stock']); } // min_purch $pattern = '/<span\s+id="multiples">[\s\n]*<strong>Multiple:\s*<\/strong>(.+)<\/span>/isU'; if (preg_match($pattern, $html, $matches)) { $result['min_purch'] = trim($matches[1]); } // price $pattern = '/<div\s+id="price_1"\s+class="li_price">(.[^<]+)<\/div>/isU'; if (preg_match($pattern, $html, $matches)) { $result['price'][1] = trim($matches[1]); } $pattern = '/<div\s+id="price_1"\s+class="li_price">[\s\n]*<span.[^>]+title="(.[^"]+)">/isU'; if (preg_match($pattern, $html, $matches)) { $priceurl = str_replace('&', '&', $matches[1]); $json = curl_get($priceurl); $json = $json['result']; if (! empty($json)) { $jsonresult = json_decode($json, true); foreach ($jsonresult['parts'][0]['webprice']['resale'] as $k=>$v) { $result['price'][$v['minqty']] = $v['price']; } } } // img_url $pattern = '/<div\s+id="part_image">[\s\n]*<img\s+src="(.[^"]+)"/isU'; if (preg_match($pattern, $html, $matches)) { $result['img_url'] = trim($matches[1]); } // page_url $result['page_url'] = $url; return $result; } /** * 最终调用函数 * @param string $keywords 搜索关键字 * @return array */ function getData($keywords) { $hrefList = getListHrefAll($keywords); $result = array(); foreach ($hrefList as $k=>$v) { $result[] = getDetail($v); } return $result; } // Test Script $keywords = trim($_GET['keywords']); $result = getData($keywords); print_r($result);
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
php之Smarty模板使用方法示例详解
高性能PHP框架Symfony2经典入门教程
PHP的error_reporting错误级别变量对照表
linux下使用crontab实现定时PHP计划任务失败的原因分析
采用memcache在web集群中实现session的同步会话
PHP关于htmlspecialchars、strip_tags、addslashes的解释
函数中使用require_once问题深入探讨 优雅的配置文件定义方法推荐
ThinkPHP使用smarty模板引擎的方法
PHP把JPEG图片转换成Progressive JPEG的方法
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
ThinkPHP页面跳转success与error方法概述
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
PHP错误Parse error: syntax error, unexpected end of file in test.php on line 12解决方法
php curl post 时出现的问题解决
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
php缓冲 output_buffering和ob_start使用介绍
PHP $_FILES中error返回值详解
php中自定义函数dump查看数组信息类似var_dump
php环境下利用session防止页面重复刷新的具体实现
PHP修改session_id示例代码
php二维数组排序方法(array_multisort usort)
linux实现php定时执行cron任务详解
php安装xdebug/php安装pear/phpunit详解步骤(图)
sae使用smarty模板的方法
解决file_get_contents无法请求https连接的方法
phpstrom使用xdebug配置方法
php使用curl发送json格式数据实例
PHP函数microtime()用法与说明
php 模拟 asp.net webFrom 按钮提交事件的思路及代码
PHP set_error_handler()函数使用详解(示例)
PHP error_log()将错误信息写入一个文件(定义和用法)
遭遇php的in_array低性能问题