分享下页面关键字抓取components.arrow.com站点代码


Posted in PHP onJanuary 30, 2014
<?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 相关文章推荐
Windows下PHP5和Apache的安装与配置
Sep 05 PHP
php读取csv实现csv文件下载功能
Dec 18 PHP
ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
Jul 22 PHP
php集成环境xampp中apache无法启动问题解决方案
Nov 18 PHP
php定义一个参数带有默认值的函数实例分析
Mar 16 PHP
php 类自动载入的方法
Jun 03 PHP
PHP判断JSON对象是否存在的方法(推荐)
Jul 06 PHP
php处理带有中文URL的方法
Jul 11 PHP
PHP中字符串长度的截取用法示例
Jan 12 PHP
自制PHP框架之路由与控制器
May 07 PHP
PHP递归的三种常用方式
Feb 28 PHP
解决laravel中日志权限莫名变成了root的问题
Oct 17 PHP
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
Jan 30 #PHP
php内核解析:PHP中的哈希表
Jan 30 #PHP
php缓冲 output_buffering和ob_start使用介绍
Jan 30 #PHP
PHP内核探索:变量概述
Jan 30 #PHP
PHP内核探索:变量存储与类型使用说明
Jan 30 #PHP
PHP $_FILES中error返回值详解
Jan 30 #PHP
带密匙的php加密解密示例分享
Jan 29 #PHP
You might like
PHP 面向对象 PHP5 中的常量
2010/05/05 PHP
php设计模式 Decorator(装饰模式)
2011/06/26 PHP
php array_pop()数组函数将数组最后一个单元弹出(出栈)
2011/07/12 PHP
浅析PHP原理之变量分离/引用(Variables Separation)
2013/08/09 PHP
JavaScript 原型继承之构造函数继承
2011/08/26 Javascript
JavaScript高级程序设计 阅读笔记(十八) js跨平台的事件
2012/08/14 Javascript
JS实现静止元素自动移动示例
2014/04/14 Javascript
JavaScript原生xmlHttp与jquery的ajax方法json数据格式实例
2015/12/04 Javascript
如何消除inline-block属性带来的标签间间隙
2016/03/31 Javascript
jquery实现点击弹出可放大居中及关闭的对话框(附demo源码下载)
2016/05/10 Javascript
基于AngularJS前端云组件最佳实践
2016/10/20 Javascript
解决微信内置浏览器返回上一页强制刷新问题方法
2017/02/05 Javascript
基于angular2 的 http服务封装的实例代码
2017/06/29 Javascript
深入理解Node.js中通用基础设计模式
2017/09/19 Javascript
使用localStorage替代cookie做本地存储
2019/09/25 Javascript
Vue分页效果与购物车功能
2019/12/13 Javascript
详解vue修改elementUI的分页组件视图没更新问题
2020/11/13 Javascript
Javascript 模拟mvc实现点餐程序案例详解
2020/12/24 Javascript
Python-基础-入门 简介
2014/08/09 Python
再谈Python中的字符串与字符编码(推荐)
2016/12/14 Python
python中如何使用朴素贝叶斯算法
2017/04/06 Python
Python matplotlib画图实例之绘制拥有彩条的图表
2017/12/28 Python
python框架中flask知识点总结
2018/08/17 Python
解决Python中list里的中文输出到html模板里的问题
2018/12/17 Python
python移位运算的实现
2019/07/15 Python
python中单下划线(_)和双下划线(__)的特殊用法
2019/08/29 Python
通过Python扫描代码关键字并进行预警的实现方法
2020/05/24 Python
Python selenium环境搭建实现过程解析
2020/09/08 Python
办公室前台岗位职责
2014/01/04 职场文书
会议活动邀请函
2014/01/27 职场文书
党员违纪检讨书
2014/02/18 职场文书
《美丽的南沙群岛》教学反思
2014/04/27 职场文书
关于热爱祖国的演讲稿
2014/05/04 职场文书
高一新生军训方案
2014/05/12 职场文书
2014公安机关纪律作风整顿思想汇报
2014/09/13 职场文书
Python+Tkinter制作专属图形化界面
2022/04/01 Python