分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)


Posted in PHP onJanuary 30, 2014
<?php
/**
 * HOST: www.icbase.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 = 5, $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 $page 页数
 * @return boolean|array
 */
function getListHtml($keywords, $page=1)
{
 if ($page < 0)
 {
 return false;
 }
 $page = $page == 0 ? 1 : intval($page);
 if ($page == 1)
 {
 $result = curl_get('http://www.icbase.com/ProResult.aspx', array('ProKey' => $keywords));
 if ( isset($result['error']) )
 {
 return false;
 //exit($result['error']);
 }
 $result = $result['result'];
 // asp.net post提交数据
 if(! defined('__VIEWSTATE') && preg_match('/<input\s+type="hidden"\s+name="__VIEWSTATE"\s+id="__VIEWSTATE"\s+value="(.[^"]+)"/isU', $result, $matches))
 {
 define('__VIEWSTATE', $matches[1]);
 } else {
 return false;
 }
 if(! defined('__PREVIOUSPAGE') && preg_match('/<input\s+type="hidden"\s+name="__PREVIOUSPAGE"\s+id="__PREVIOUSPAGE"\s+value="(.[^"]+)"/isU', $result, $matches))
 {
 define('__PREVIOUSPAGE', $matches[1]);
 } else {
 return false;
 }
 if(! defined('__EVENTVALIDATION') && preg_match('/<input\s+type="hidden"\s+name="__EVENTVALIDATION"\s+id="__EVENTVALIDATION"\s+value="(.[^"]+)"/isU', $result, $matches))
 {
 define('__EVENTVALIDATION', $matches[1]);
 } else {
 return false;
 }
 return $result;
 }
 $data = array(
 '__EVENTTARGET' => 'pager',
 '__EVENTARGUMENT' => $page,
 '__VIEWSTATE' => __VIEWSTATE,
 '__PREVIOUSPAGE' => __PREVIOUSPAGE,
 '__EVENTVALIDATION' => __EVENTVALIDATION,
 );
 $result = curl_post('http://www.icbase.com/ProResult.aspx?ProKey=' . $keywords, $data);
 if ( isset($result['error']) )
 {
 return false;
 //exit($result['error']);
 }
 $result = $result['result'];
 return $result;
}
/**
 * 获取列表页 a链接的url
 * @param string $html html源码
 * @return array
 */
function getListHref($html)
{
 $pattern = '/<a\s+href=\'(.[^\']+)\'\s+target="_blank"\s*>[\s\n]*<img.+[^>]\/>/isU';
 if (preg_match_all($pattern, $html, $matches))
 {
 return $matches[1];
 } else {
 // 没有匹配项
 return array();
 }
}
/**
 * 获取下一页数字
 * @param string $html html源码
 * @return number
 */
function getListNextPage($html)
{
 $pattern = '/<div\s+id="Pager".+[^>]>.+<a\s+href="javascript\:__doPostBack\(\'Pager\',\'(\d+)\'\)">><\/a>/isU';
 if (preg_match($pattern, $html, $matches))
 {
 return intval($matches[1]);
 } else {
 return -1;
 }
}
/**
 * 获取列表也所有的href
 * @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);
 while ($nextPage > 0)
 {
 $html = getListHtml($keywords, $nextPage);
 $tmpHrefList = getListHref($html);
 $hrefList = array_merge($hrefList, $tmpHrefList);
 $nextPage = getListNextPage($html);
 }
 return $hrefList;
}
/**
 * 获取详情页信息
 * @param string $url url地址或者是抓取到的html源代码 根据@see $is_url 区分
 * @param int $is_url 1使用的是url地址 0直接处理html源代码
 * @return boolean|multitype:|multitype:string
 */
function getDetail($url, $is_url = 1)
{
 if ( empty($url) )
 {
 return false;
 }
 $host = 'www.icbase.com';
 $html = $url;
 if ($is_url) {
 $url = '/' . ltrim($url, '/');
 $result = curl_get($host . $url);
 if ( isset($result['error']) )
 {
 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 = '/<td>产品型号<\/td><td>(.[^<]+)</isU';
 if (preg_match($pattern, $html, $matches))
 {
 $result['mfg_part'] = trim($matches[1]);
 } else {
 // 此项木有,说明也没处处了
 return array();
 }
 // mfg_name
 $pattern = '/<td>厂商<\/td>[\s\n]*<td>(.+)<\/td>/isU';
 if (preg_match($pattern, $html, $matches))
 {
 $result['mfg_name'] = trim($matches[1]);
 }
 // para
 $pattern = '/<tr\s+style="background-color:#E9E9E9;color:black; font-weight:bold;">(.+)<\/tr><\/table>/isU';
 if (preg_match($pattern, $html, $matches))
 {
 if (preg_match_all('/<td>(.+)<\/td>/isU', $matches[1], $matches))
 {
 $count = count($matches[1]);
 $count = intval($count / 2 );
 foreach ($matches[1] as $k=>$v)
 {
 if ($k >= $count)
 {
 break;
 }
 if (trim($v) == '描述')
 {
 // desc
 $result['desc'] = trim($matches[1][$count + $k]);
 continue;
 }
 $v = trim($v);
 $result['para'][$v] = trim($matches[1][$count + $k]);
 }
 }
 }
 // pdf_url
 $pattern = '/<td>详细资料<\/td><td><a\s+href="(.[^"]+)"/isU';
 if (preg_match($pattern, $html, $matches))
 {
 $result['pdf_url'] = trim($matches[1]);
 }
 // sup_stock
 $pattern = '/<td>库存数量<\/td>[\s\n]*<td>(\d+)<\/td>/isU';
 if (preg_match($pattern, $html, $matches))
 {
 $result['sup_stock'] = trim($matches[1]);
 }
 // price
 $pattern = '/<tr><td.[^>]+>(\d+)\+<\/td><td.[^>]+>.[^\d]*([\d.]+)<\/td><\/tr>/isU';
 if (preg_match_all($pattern, $html, $matches))
 {
 foreach ($matches[1] as $k=>$v)
 {
 $result['price'][$v] = '¥' . $matches[2][$k];
 }
 }
 //img_url
 $pattern = '/<td>图片<\/td><td><img\s+src="(.[^"]+)"/isU';
 if (preg_match($pattern, $html, $matches))
 {
 $result['img_url'] = trim($matches[1]);
 }
 // page_url
 if ($is_url)
 {
 $result['page_url'] = $host . $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 相关文章推荐
在Zeus Web Server中安装PHP语言支持
Oct 09 PHP
php array的学习笔记
May 16 PHP
定义php常量的详解
Jun 09 PHP
PHP反射使用实例和PHP反射API的中文说明
Jul 02 PHP
php可扩展的验证类实例(可对邮件、手机号、URL等验证)
Jul 09 PHP
PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
Dec 24 PHP
Joomla语言翻译类Jtext用法分析
May 05 PHP
PHP生成图像验证码的方法小结(2种方法)
Jul 18 PHP
PHP数据对象PDO操作技巧小结
Sep 27 PHP
ThinkPHP简单使用memcache缓存的方法
Nov 15 PHP
php接口技术实例详解
Dec 07 PHP
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
Nov 22 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
PHP过滤★等特殊符号的正则
Jan 27 #PHP
You might like
解析php中两种缩放图片的函数,为图片添加水印
2013/06/14 PHP
PHP 关于访问控制的和运算符优先级介绍
2013/07/08 PHP
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
2014/04/24 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
2014/10/13 PHP
php运行时动态创建函数的方法
2015/03/16 PHP
thinkphp多表查询两表有重复相同字段的完美解决方法
2016/09/22 PHP
php socket通信简单实现
2016/11/18 PHP
Jquery中对数组的操作代码
2011/08/12 Javascript
JS中表单的使用小结
2014/01/11 Javascript
jQuery中Ajax的get、post等方法详解
2015/01/20 Javascript
JS实现状态栏跑马灯文字效果代码
2015/10/24 Javascript
JS在Chrome浏览器中showModalDialog函数返回值为undefined的解决方法
2016/08/03 Javascript
Jquery Easyui选项卡组件Tab使用详解(10)
2016/12/18 Javascript
zTree jQuery 树插件的使用(实例讲解)
2017/09/25 jQuery
JS实现的DOM插入节点操作示例
2018/04/04 Javascript
详解Vue改变数组中对象的属性不重新渲染View的解决方案
2018/09/21 Javascript
jquery获取img的src值实例介绍
2019/01/16 jQuery
微信小程序全局变量功能与用法详解
2019/01/22 Javascript
使用layer弹窗提交表单时判断表单是否输入为空的例子
2019/09/26 Javascript
微信小程序淘宝首页双排图片布局排版代码(推荐)
2020/10/29 Javascript
k8s node节点重新加入master集群的实现
2021/02/22 Javascript
浅谈Python类的__getitem__和__setitem__特殊方法
2016/12/25 Python
python运行时强制刷新缓冲区的方法
2019/01/14 Python
详解Django配置优化方法
2019/11/18 Python
解决在keras中使用model.save()函数保存模型失败的问题
2020/05/21 Python
python 爬取腾讯视频评论的实现步骤
2021/02/18 Python
意大利体育用品和运动服网上商店:Maxi Sport
2019/09/14 全球购物
PHP解析URL是哪个函数?怎么用?
2013/05/09 面试题
幼儿园中秋节活动方案
2014/02/06 职场文书
文艺晚会主持词
2014/03/24 职场文书
法人授权委托书样本
2014/09/19 职场文书
求职简历自我评价怎么写
2015/03/10 职场文书
2016习总书记系列重要讲话心得体会
2016/01/15 职场文书
2016年度基层党建工作公开承诺书
2016/03/25 职场文书
导游词之无锡梅园
2019/11/28 职场文书
《堡垒之夜》联动《刺客信条》 4月7日正式上线
2022/04/06 其他游戏