——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
查看源代码可以发现
公司名等信息都是这样的格式
在用正则匹配就行了:
preg_match(“/Company Name:(.*?)/s”,$res1,$Cname);
这样$Cname中就是绿色的内容
显然
$Cname = trim(strip_tags($Cname[1]));
trim:去除字符串首尾的空格,
tip:
有时会碰到内容中有双引号(”),常见于公司介绍等内容,需要替换掉,否则存数据库时会出现sql语句错误。
$name = str_replace(“\““,”",$name);
六、 将获取的信息存入数据库
mysql_pconnect(“localhost”, “root“, “password“) or
die (“Could not connect” . mysql_error());
mysql_select_db(“company“);
mysql_query(“SET NAMES ‘UTF8′”);
$result = mysql_query(“
INSERT INTO alibaba (
Name,Company,Address,City,Province,Region,Zip,Tel,Phone,Fax,Web
) VALUES(
‘”.htmlspecialchars($name).”‘,
‘”.htmlspecialchars($Cname).”‘,
‘”.htmlspecialchars($Add).”‘,
‘”.htmlspecialchars($City).”‘,
‘”.htmlspecialchars($Pronvice).”‘,
‘”.htmlspecialchars($Region).”‘,
‘”.htmlspecialchars($Zip).”‘,
‘”.htmlspecialchars($Tel).”‘,
‘”.htmlspecialchars($Phone).”‘,
‘”.htmlspecialchars($Fax).”‘,
‘”.htmlspecialchars($Web).”‘
)”);
?>
Htmlspecialchars是将内容中的html字符做转义处理,但默认不处理双引号,所以前面有提到需要单独将双引号替换。
帐户、密码、数据库名、表名以及其中各个字段定义请根据实际情况做修改。
七、 如何处理每个列表页面
前面的循环只将列表页面第一页的20个商家做了采集,但是有29个列表页面需要处理。
这样做一个带参数的页面跳转。
if($page >= 29){
echo “OVER!”;exit();
}else{
echo “++$page.”‘>”;
}
?>
然后在此php文件的开头获取需要处理的列表页号
if($_GET['page']){
$page = $_GET['page'];
}else{
$page = ’1′;
}
?>
这样php运行时会先获取需要处理的列表页号,
如果没有传page参数则从第一页开始执行,
拼出链接,即文章最开头提到的
$HTTP_URL=”http://www.alibaba.com/corporations/jiangmen/CN——————————–/”.$page.”.html”;
在程序最后会判断当前处理了多少页,如果达到最大页面数就显示OVER并结束程序。
否则++$page,将页号加1并做跳转继续执行此程序。
八、 php代码
-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
set_time_limit(0);
function _rand() {
$length=26;
$chars = “0123456789abcdefghijklmnopqrstuvwxyz”;
$max = strlen($chars) – 1;
mt_srand((double)microtime() * 1000000);
$string = ”;
for($i = 0; $i
$string .= $chars[mt_rand(0, $max)];
}
return $string;
}
error_reporting(0);
ini_set(‘html_errors’,false);
ini_set(‘display_errors’,false);
mysql_pconnect(“localhost”, “root”, “password”) or
die (“Could not connect” . mysql_error());
mysql_select_db(“company”);
mysql_query(“SET NAMES ‘UTF8′”);
if($_GET['page']){
$page = $_GET['page'];
}else{
$page = ’1′;
}
$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);
preg_match_all(‘/href\s*=\s*["|\']?([^\s"\'>]*).en.alibaba.com\”/i’,$res,$arr);
foreach($arr[1] as $a=>$web){
$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);
preg_match(“/contactName(.*?)/s”,$res1,$name);
$name = strip_tags($name[1]);
//$name = str_replace(“\”",”",$name);
//$name = str_replace(“>”,”",$name);
$name = trim($name);
preg_match(“/Company Name:(.*?)/s”,$res1,$Cname);
$Cname = trim(strip_tags($Cname[1]));
preg_match(“/Street Address:(.*?)/s”,$res1,$Add);
$Add = trim(strip_tags($Add[1]));
preg_match(“/City:(.*?)/s”,$res1,$City);
$City = trim(strip_tags($City[1]));
preg_match(“/Province\/State:(.*?)/s”,$res1,$Pronvice);
$Pronvice = trim(strip_tags($Pronvice[1]));
preg_match(“/Country\/Region:(.*?)/s”,$res1,$Region);
$Region = trim(strip_tags($Region[1]));
preg_match(“/Zip:(.*?)/s”,$res1,$Zip);
$Zip = trim(strip_tags($Zip[1]));
preg_match(“/Telephone:(.*?)/s”,$res1,$Tel);
$Tel = trim(strip_tags($Tel[1]));
preg_match(“/Mobile Phone:(.*?)/s”,$res1,$Phone);
$Phone = trim(strip_tags($Phone[1]));
preg_match(“/Fax:(.*?)/s”,$res1,$Fax);
$Fax = trim(strip_tags($Fax[1]));
preg_match(“/Website:(.*?)/s”,$res1,$Web);
$Web = trim(strip_tags($Web[1]));
$result = mysql_query(“
INSERT INTO alibaba (
Name,
Company,
Address,
City,
Province,
Region,
Zip,
Tel,
Phone,
Fax,
Web
) VALUES(
‘”.htmlspecialchars($name).”‘,
‘”.htmlspecialchars($Cname).”‘,
‘”.htmlspecialchars($Add).”‘,
‘”.htmlspecialchars($City).”‘,
‘”.htmlspecialchars($Pronvice).”‘,
‘”.htmlspecialchars($Region).”‘,
‘”.htmlspecialchars($Zip).”‘,
‘”.htmlspecialchars($Tel).”‘,
‘”.htmlspecialchars($Phone).”‘,
‘”.htmlspecialchars($Fax).”‘,
‘”.htmlspecialchars($Web).”‘
)”);
}
if($page >= 29){
echo “OVER!”;exit();
}else{
echo “”;
}
?>

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

在PHP中,可以利用implode()函数的第一个参数来设置没有分隔符,该函数的第一个参数用于规定数组元素之间放置的内容,默认是空字符串,也可将第一个参数设置为空,语法为“implode(数组)”或者“implode("",数组)”。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3汉化版
中文版,非常好用

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

Dreamweaver CS6
视觉化网页开发工具

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中