100行PHP代码采集阿里巴巴商家信息
——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 “”;
}
?>

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

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

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

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

热门话题

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

如果您是一位经验丰富的 PHP 开发人员,您可能会感觉您已经在那里并且已经完成了。您已经开发了大量的应用程序,调试了数百万行代码,并调整了一堆脚本来实现操作

本教程演示了如何使用PHP有效地处理XML文档。 XML(可扩展的标记语言)是一种用于人类可读性和机器解析的多功能文本标记语言。它通常用于数据存储

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

字符串是由字符组成的序列,包括字母、数字和符号。本教程将学习如何使用不同的方法在PHP中计算给定字符串中元音的数量。英语中的元音是a、e、i、o、u,它们可以是大写或小写。 什么是元音? 元音是代表特定语音的字母字符。英语中共有五个元音,包括大写和小写: a, e, i, o, u 示例 1 输入:字符串 = "Tutorialspoint" 输出:6 解释 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。总共有 6 个元

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。

PHP的魔法方法有哪些?PHP的魔法方法包括:1.\_\_construct,用于初始化对象;2.\_\_destruct,用于清理资源;3.\_\_call,处理不存在的方法调用;4.\_\_get,实现动态属性访问;5.\_\_set,实现动态属性设置。这些方法在特定情况下自动调用,提升代码的灵活性和效率。
