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 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











이번 장에서는 CakePHP의 환경 변수, 일반 구성, 데이터베이스 구성, 이메일 구성에 대해 알아봅니다.

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

CakePHP에서 데이터베이스 작업은 매우 쉽습니다. 이번 장에서는 CRUD(생성, 읽기, 업데이트, 삭제) 작업을 이해하겠습니다.
