分享下页面关键字抓取components.arrow.com站点代码
代码 分享 页面 关键字 抓取 站点 com Components
2023-06-13 09:15:17 时间
<?php
/**
*HOST:components.arrow.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=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源码
*@paramstring$keywords搜索关键字
*@paramint$start开始记录数
*@returnboolean|array
*/
functiongetListHtml($keywords,$start=0)
{
if($start<0)
{
returnfalse;
}
$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"]))
{
returnfalse;
//exit($result["error"]);
}
$result=$result["result"];
return$result;
}
/**
*获取列表页连接href
*@paramstring$htmlhtml源码
*@returnarray
*/
functiongetListHref($html)
{
$pattern="/<td\s+class="col_mfr_part_num"><a\s+href="(.[^>]+)">/isU";
if(preg_match_all($pattern,$html,$matches))
{
return$matches[1];
}else{
//没有匹配项
returnarray();
}
}
/**
*获取下一页数字start
*@paramstring$htmlhtml源码
*@returnnumber
*/
functiongetListNextPage($html)
{
$pattern="/<script\s+language="javascript">buildPagination\(\"\d+\",\"\d+\",\"(\d+)\",\d+\);<\/script>/isU";
if(preg_match($pattern,$html,$matches))
{
returnintval($matches[1]);
}else{
return-1;
}
}
/**
*获取列表也所有的详细列表
*@paramstring$keywords搜索关键字
*@returnboolean|array
*/
functiongetListHrefAll($keywords)
{
if(empty($keywords))
{
returnfalse;
}
$html=getListHtml($keywords);
$hrefList=getListHref($html);
if(empty($hrefList))
{
//没有结果
returnarray();
}
$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;
}
/**
*获取详情页信息
*@paramstring$urlurl地址
*@returnarray()
*/
functiongetDetail($url)
{
if(empty($url))
{
returnfalse;
}
$host="http://components.arrow.com";
$url=$host.$url;
$result=curl_get($url);
if(isset($result["error"]))
{
returnarray();
//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>PartNo:\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");
returnarray();
}
//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("PackageType"==$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;
}
/**
*最终调用函数
*@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);
相关文章
- 技术分享 | 代码覆盖率集成
- 湖仓一体电商项目(十一):编写写入DWS层业务代码
- 运筹学教学 | 分配问题代码分享(Java代码及详细注释)
- 数据分享|R语言逐步回归、方差分析anova电影市场调查问卷数据可视化|附代码数据
- 基于出租车GPS轨迹数据的研究:出租车行程的数据分析|附代码数据
- 【视频】随机波动率SV模型原理和Python对标普SP500股票指数预测|数据分享|附代码数据
- Scott 数据 映射 MySQL代码实现分享
- js文章快速分享代码详解编程语言
- 页面显示载入中,请稍候… 自动跳转到的JS代码详解编程语言
- 马哥分享的25段shell脚本代码,日常工作基本够用
- 谷歌推出“傻瓜式”开发工具,不用写代码也能制作 APP
- 保障你的代码安全:使用Linux SVN保障代码管理和代码安全(linuxsvn安全)
- 性能优化利用Redis缓存提升代码性能(redis缓存实现代码)
- 去html代码的正则推荐
- CSS首字母大写代码
- js实现一个省市区三级联动选择框代码分享
- .Net中生成二维的表格的代码分享
- python获取豆瓣电影简介代码分享
- 自己写的java日志类和方法代码分享
- php分页代码学习示例分享
- c#程序删除自身代码示例分享
- Ajax核心技术代码分享
- 数据挖掘之Apriori算法详解和Python实现代码分享
- 可以保证单词完整性的PHP英文字符串截取代码分享
- 封装好的js判断操作系统与浏览器代码分享
- IOS开发代码分享之设置UISearchBar的背景颜色