分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
2023-06-13 09:15:17 时间
<?php
/**
*HOST:www.icbase.com
*/
//set_time_limit(0);
//basefunction
functioncurl_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;
}
functioncurl_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源码
*@paramstring$keywords搜索关键字
*@paramint$page页数
*@returnboolean|array
*/
functiongetListHtml($keywords,$page=1)
{
if($page<0)
{
returnfalse;
}
$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"]))
{
returnfalse;
//exit($result["error"]);
}
$result=$result["result"];
//asp.netpost提交数据
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{
returnfalse;
}
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{
returnfalse;
}
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{
returnfalse;
}
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"]))
{
returnfalse;
//exit($result["error"]);
}
$result=$result["result"];
return$result;
}
/**
*获取列表页a链接的url
*@paramstring$htmlhtml源码
*@returnarray
*/
functiongetListHref($html)
{
$pattern="/<a\s+href=\"(.[^\"]+)\"\s+target="_blank"\s*>[\s\n]*<img.+[^>]\/>/isU";
if(preg_match_all($pattern,$html,$matches))
{
return$matches[1];
}else{
//没有匹配项
returnarray();
}
}
/**
*获取下一页数字
*@paramstring$htmlhtml源码
*@returnnumber
*/
functiongetListNextPage($html)
{
$pattern="/<div\s+id="Pager".+[^>]>.+<a\s+href="javascript\:__doPostBack\(\"Pager\",\"(\d+)\"\)">><\/a>/isU";
if(preg_match($pattern,$html,$matches))
{
returnintval($matches[1]);
}else{
return-1;
}
}
/**
*获取列表也所有的href
*@paramstring$keywords搜索关键字
*@returnboolean|array
*/
functiongetListHrefAll($keywords)
{
if(empty($keywords))
{
returnfalse;
}
$html=getListHtml($keywords);
$hrefList=getListHref($html);
if(empty($hrefList))
{
//没有结果
returnarray();
}
$nextPage=getListNextPage($html);
while($nextPage>0)
{
$html=getListHtml($keywords,$nextPage);
$tmpHrefList=getListHref($html);
$hrefList=array_merge($hrefList,$tmpHrefList);
$nextPage=getListNextPage($html);
}
return$hrefList;
}
/**
*获取详情页信息
*@paramstring$urlurl地址或者是抓取到的html源代码根据@see$is_url区分
*@paramint$is_url1使用的是url地址0直接处理html源代码
*@returnboolean|multitype:|multitype:string
*/
functiongetDetail($url,$is_url=1)
{
if(empty($url))
{
returnfalse;
}
$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{
//此项木有,说明也没处处了
returnarray();
}
//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;
}
/**
*最终调用函数
*@paramstring$keywords搜索关键字
*@returnarray
*/
functiongetData($keywords)
{
$hrefList=getListHrefAll($keywords);
$result=array();
foreach($hrefListas$k=>$v)
{
$result[]=getDetail($v);
}
return$result;
}
//TestScript
$keywords=trim($_GET["keywords"]);
$result=getData($keywords);
print_r($result);
相关文章
- 让Linux支持ASP:开启技术新时代(让linux支持asp)
- ASP实现MySQL数据库连接及编写代码(asp连接mysql代码)
- ASP.NET:一段比较经典的多线程学习代码
- asp.net下利用JS实现对后台CS代码的调用方法
- asp.net(c#)利用构造器链的代码
- googlesuggest下拉菜单实现代码(asp.net版本)
- asp.net下用服务器端代码解决浏览器兼容性问题
- asp.net扩展GridView增加单选按钮列的代码
- asp.net下降文本格式数据导入到数据库中的代码
- jquery调用asp.net页面后台的实现代码
- asp.net生成验证码代码(纯中文)
- Ajax+asp.net智能匹配检索(含图含完整代码)
- ASP.NET设计网络硬盘之两重要类代码
- asp.net中GridView和DataGrid相同列合并实现代码
- 在Asp.net网页上写读Cookie的两种不同语法介绍
- asp.net中gridview的查询、分页、编辑更新、删除的实例代码
- ASP.NET笔记之ListView与DropDownList的使用
- Asp.Net获取网站截图的实例代码
- 如何在asp.net中使用FreeTextBox控件
- asp.net按指定模板导出word,pdf实例代码
- 解读ASP.NET密码强度验证代码实例分享
- asp.net中利用Jquery+Ajax+Json实现无刷新分页的实例代码
- asp.net无法获取iis目录的问题解决方法
- asp.net上传execl文件后,在页面上加载显示(示例代码)
- ASP.NET小结之MVC,MVP,MVVM比较以及区别(二)