欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

100行PHP代码采集阿里巴巴商家信息

程序员文章站 2022-06-17 08:42:14
...

——authored by 李家优 Alibaba商家信息采集说明 一、如何获取商家列表页面链接 http://www.alibaba.com/corporations/jiangmen/CN——————————–.html 例如此页面为alibaba上所有jiamen商家信息列表,也能看到 Page:1/29 字样 http://www.alibaba.

——authored by 李家优

Alibaba商家信息采集说明

一、 如何获取商家列表页面链接

http://www.alibaba.com/corporations/jiangmen/CN——————————–.html

例如此页面为alibaba上所有jiamen商家信息列表,也能看到Page:1/29字样

http://www.alibaba.com/corporations/jiangmen/CN——————————–/2.html?tracelog=24581_list_turnpage

可发现末尾变成了2.html……

把?以及后面的参数去掉,并修改3、4、5试试

http://www.alibaba.com/corporations/jiangmen/CN——————————–/2.html

http://www.alibaba.com/corporations/jiangmen/CN——————————–/3.html

http://www.alibaba.com/corporations/jiangmen/CN——————————–/5.html

发现通用的列表页面链接应该是:

http://www.alibaba.com/corporations/jiangmen/CN——————————–/{$page}.html

二、 从列表页面获取所有页面内容

由于alibaba防采集,所以我们伪装成IE浏览器的HTTP访问。

$HTTP_SESSION=_rand();

$HTTP_SESSION;

$HTTP_URL=”http://www.alibaba.com/corporations/jiangmen/CN——————————–/”.$page.”.html”;

$ch = curl_init();

curl_setopt ($ch,CURLOPT_URL,$HTTP_URL);

curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);

curl_setopt($ch,CURLOPT_USERAGENT,”Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)”);

$res = curl_exec($ch);

curl_close ($ch);

?>

这样列表页的内容就赋值给了$res

三、 如何从列表页面获取具体商家链接

以第一页为例

http://www.alibaba.com/corporations/jiangmen/CN——————————–/1.html

查看源代码,可以发现所有商家名称的链接都是此样式

Jiangmen Ronda Battery Co., Ltd.

即http://{CompanyName}.en.alibaba.com

用正则从$res的内容中找出所有的{CompanyName}:

preg_match_all(‘/href\s*=\s*["|\']?([^\s"\'>]*).en.alibaba.com\”/i’,$res,$arr);

这样$arr中就是列表第一页中所有的商家的链接了。

四、 如何采集商家信息

首先循环得到单个商家的链接

foreach($arr[1] as $a=>$web)

?>

$web拼上.en.alibaba.com就是商家链接了

例如http://rondabattery.en.alibaba.com/

浏览发现 所有公司的联系信息都是http://rondabattery.en.alibaba.com/contactinfo.html

再伪装IE采集一次单个商家的联系信息页面

$HTTP_SESSION=_rand();

$HTTP_SESSION;

$HTTP_Server=$web;

$HTTP_URL=”.en.alibaba.com/contactinfo.html“;

$ch1 = curl_init();

curl_setopt ($ch1,CURLOPT_URL,$HTTP_Server.$HTTP_URL);

curl_setopt($ch1,CURLOPT_RETURNTRANSFER,true);

curl_setopt($ch1,CURLOPT_USERAGENT,”Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)”);

$res1 = curl_exec($ch1);

curl_close ($ch1);

?>

这样$res1中就是这个rondabattery公司联系信息页面的内容了。

五、 如何采集联系人、电话等详细信息

http://rondabattery.en.alibaba.com/contactinfo.html

查看源代码可以发现

Company Name:

Jiangmen Ronda Battery Co., Ltd.

公司名等信息都是这样的格式

在用正则匹配就行了:

preg_match(“/Company Name:(.*?)/s”,$res1,$Cname);

这样$Cname中就是绿色的内容

Company Name:

Jiangmen Ronda Battery Co., Ltd.

显然