PHP制作百度词典查词采集器


Posted in PHP onJanuary 29, 2015

PHP制作百度词典查词采集器

百度dict 采集样本

写的采集百度dict词典翻译后的所有结果数据,当然附带了13.5w单词库和采集简单的案例,这里我把写出的主要类dict.class.php放出来,项目地址http://github.com/widuu/baidu_dict,有需要的直接fork就可以了~么么哒,这东西用的人很少,所以有用的兄弟拿走了哈~

<?php
/**
 * dict.class.php 采集百度词典翻译内容
 *
 * @copyright      (C) 2014 widuu
 * @license       http://www.widuu.com
 * @lastmodify     2014-2-15
 */
 
 
header("content-type:text/html;charset=utf8");
class Dict{

	private $word;
	
	//显示的条数
	private static $num = 10;

	public function __construct(){}
	
	
	/**
   * 公用返回百度采集数据的方法
   * @param string 英文单词
   * retun array(
	 *				symbol" => 音标
	 *				"pro"	 => 发音
	 *				"example"=> 例句
	 *				"explain"=> 简明释义
	 *				"synonym"=> 同反义词
	 *				"phrase" => 短语数组
	 *			)
   *
	 */
	public function content($word){
		 $this -> word = $word;
		 $symbol = $this -> Pronounced();
		 $pro	 = $this->getSay();
		 $example = $this -> getExample();
		 $explain = $this -> getExplain();
		 $synonym = $this -> getSynonym();
		 $phrase = $this -> getPhrase();
		 $result = array(
				"symbol" => $symbol,		//音标
				"pro"	 => $pro,			//发音
				"example"=> $example,		//例句
				"explain"=> $explain,		//简明释义
				"synonym"=> $synonym,		//同反义词
				"phrase" => $phrase 		//短语数组
			);
		return $result;
	}


	/**
   * 远程获取百度翻译内容
   * get function curl
   * retun string
   *
	 */

	private function getContent(){
 		$useragent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0";
 		$ch = curl_init();
 		$url = "http://dict.baidu.com/s?wd=".$this->word;
 		curl_setopt($ch, CURLOPT_URL, $url);
 		curl_setopt($ch, CURLOPT_USERAGENT,$useragent);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
		curl_setopt($ch, CURLOPT_HTTPGET, 1);
		curl_setopt($ch, CURLOPT_AUTOREFERER,1);
		curl_setopt($ch, CURLOPT_HEADER, 0); 
		curl_setopt($ch, CURLOPT_TIMEOUT, 30);
		$result = curl_exec($ch);
		if (curl_errno($curl)) {
			echo 'Errno'.curl_error($curl);
		}
		curl_close($ch);
		return $result;
	}


	/**
   * 获取百度翻译发音
   * retun array(英,美)
   *
	 */

	private function Pronounced(){
		$data = $this -> getContent();
		preg_match_all("/\"EN\-US\"\>(.*)\<\/b\>/Ui",$data,$pronounced);
		return array(
			'en' => $pronounced[1][0],
			'us' => $pronounced[1][1]
		);
	}

	/**
	 * 获取百度翻译发音
	 * return array(英,美)
	 *
	 */

	private function getSay(){
		$data = $this -> getContent();
		preg_match_all("/url=\"(.*)\"/Ui",$data,$pronounced);
		return array(
			'en' => $pronounced[1][0],
			'us' => $pronounced[1][1]
		);	
	}

	/**
   * 获取百度翻译例句
   * return array() 多维数组 例句
   * 
	 */

	private function getExample(){
		$str = "";
		$data = $this -> getContent();
		preg_match_all("/var example_data = (.*)\]\;/Us",$data,$example);
	  $data1 = "[[[".ltrim($example[1][0],"[");
	  $data2 = explode("[[[",$data1);
	  $num = count(array_filter($data2));
		foreach($data2 as $key => $value){
		 	$data3 = explode("[[","[[".$value);
		 	foreach ($data3 as $k => $v) {
		 		preg_match_all("/\[\"(.*)\",/Us","[".$v, $match);
		 		if(!empty($match[1])){
		 			$str .= implode($match[1]," ")."@";
		 		}
		 	}
		}
		$data4 = trim($str,"@");
		$data5 = explode("@", $data4);
		$result = array_chunk($data5, 2);
		return $result;
	}

	/**
   * 获取简明释义
   * return array (x => "词性",b => "附属")
   * 
	 **/

	private function getExplain(){
		$data = $this -> getContent();
		preg_match_all("/id\=\"en\-simple\-means\"\>(.*)\<div(\s+)class\=\"source\"\>/Us",$data,$explain);
		$r_data = $explain[1][0];
		preg_match_all("/\<p\>\<strong\>(?P<adj>.*)\<\/strong\>\<span\>(?P<name>.*)\<\/span\>\<\/p\>/Us", $r_data, $a_data);
		preg_match_all("/\<span\>(?P<tag>[^\>]+)\:\<a(\s+)href\=\"(.*)\"\>(?P<word>.*)\<\/a\>\<\/span\>/Us", $r_data, $b_data);
		
		$result = array();
		foreach ($a_data["adj"] as $key => $value) {
			$result[$value] = $a_data["name"][$key];
		}
		
		$word_b = array();
		foreach ($b_data["tag"] as $key => $value) {
			$word_b[$value] = strip_tags($b_data["word"][$key]);
		}
		
		$result_data = array("x" => $result,"b" => $word_b);

 		return $result_data;
	}


	/**
   * 获取同义词
   * return array(0 => "同义词", 1 => "反义词") 一般为多维数组
   * 
	 */

	private function getSynonym(){
		$data = $this -> getContent();
		preg_match_all("/id=\"en\-syn\-ant\"\>(.*)<div(\s+)class\=\"source\">/Us",$data,$synonym);
		$content = $synonym[1][0];
		$data1 = explode("</dl>", $content);
		$result = array();
		$data2 = array();
		foreach ($data1 as $key => $value) {
			preg_match_all("/\<strong\>(?P<adj>.*)\ \;\<\/strong\>\<\/div\>\<div(\s+)class\=\"syn\-ant\-list\"\>\<ul\>(?<content>.*)\<\/ul\>/Us", $value, $r_data);
			$data2[$key]["adj"] = $r_data["adj"];
			$data2[$key]["content"] = $r_data["content"];
		}

		foreach ($data2 as $key => $value) {
			foreach ($value["content"] as $k => $v) {
				if(!empty($v)){
					preg_match_all("/\<li\>\<p\>(?P<title>.*)\<\/p\>(?P<value>.*)\<\/li>/Us", $v, $v_data);
					foreach ($v_data['title'] as $m => $d) {
						$data = strip_tags(preg_replace("<</a>>"," ", $v_data["value"][$m]));
						$result[$key][$value["adj"][$k]][$d] = $data;
					}
				}
			}
		}
 		return $result;
	}

	/**
   * 获取短语词组
   * return array (key => value) 一维或者多维数组
   * 
	 */

	private function getPhrase(){
		$num = self::$num;
		$data = $this -> getContent();
		preg_match_all("/id=\"en\-phrase\"\>(.*)\<div class\=\"source\"\>/Us",$data,$phrase);
		$data = explode("</dd>",$phrase[1][0]);
		$data1 = array_slice($data,0,$num);
		$result = array();
		foreach ($data1 as $key => $value) {
			$data2 = explode("</p>", $value);
			$n = count($data2);
			if($n<=3){
				$result[str_replace(" ","",strip_tags($data2[0]))] = strip_tags($data2[1]);
			}else{
				$data3 = array_slice($data2,0,$n-1);
				$data4 = array_slice($data2,0,2);
				$res = array_diff($data3,$data4);
				$data5 = array_chunk($res,2);
				$key_value = trim(str_replace(" ","",strip_tags($data4[0])));
				$result[$key_value] = strip_tags($data4[1]);
				foreach ($data5 as $key => $value) {
					foreach ($value as $k => $v) {
						$value[$k] = strip_tags($v);
					}
					$array = array($result[$key_value],$value);
					if (array_key_exists($key_value, $result)){
						$result[$key_value] = $array;
					}
				}
				
			}
		}
		return $result;
	}

	/**
	 * 将数组转换为字符串
	 *
	 * @param  array  $data    数组
	 * @param  bool  $isformdata 如果为0,则不使用new_stripslashes处理,可选参数,默认为1
	 * @return  string 返回字符串,如果,data为空,则返回空
	 */
	private function array2string($data, $isformdata = 1) {
	  if($data == '') return '';
	  if($isformdata) $data = $this->new_stripslashes($data);
	  return addslashes(var_export($data, TRUE));
	}

	/**
	 * 返回经stripslashes处理过的字符串或数组
	 * @param $string 需要处理的字符串或数组
	 * @return mixed
	 */
	private function new_stripslashes($string) {
	  if(!is_array($string)) return stripslashes($string);
	  foreach($string as $key => $val) $string[$key] = $this->new_stripslashes($val);
	  return $string;
	}

}

// $word = new dict("express");
// $word ->content();

以上就是本文的全部内容了,非常实用的功能,希望小伙伴们能够喜欢。

PHP 相关文章推荐
php 处理上百万条的数据库如何提高处理查询速度
Feb 08 PHP
php cookies中删除的一般赋值方法
May 07 PHP
php中常用字符串处理代码片段整理
Nov 07 PHP
php中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
Nov 01 PHP
PHP中array_map与array_column之间的关系分析
Aug 19 PHP
php实现设计模式中的单例模式详解
Oct 11 PHP
利用PHP如何实现Socket服务器
Sep 23 PHP
分享五个PHP7性能优化提升技巧
Dec 07 PHP
Laravel框架自定义公共函数的引入操作示例
Apr 16 PHP
PHP使用ajax的post方式下载excel文件简单示例
Aug 06 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
Dec 20 PHP
PHP设计模式(五)适配器模式Adapter实例详解【结构型】
May 02 PHP
php+mysqli事务控制实现银行转账实例
Jan 29 #PHP
php+mysqli批量查询多张表数据的方法
Jan 29 #PHP
php+mysqli实现批量执行插入、更新及删除数据的方法
Jan 29 #PHP
php+mysqli使用面向对象方式查询数据库实例
Jan 29 #PHP
php+mysqli使用面向对象方式更新数据库实例
Jan 29 #PHP
新浪SAE搭建PHP项目教程
Jan 28 #PHP
php+mysqli数据库连接的两种方式
Jan 28 #PHP
You might like
php中文字母数字验证码实现代码
2008/04/25 PHP
PHP的命令行命令使用指南
2015/08/18 PHP
php array_walk_recursive 使用自定的函数处理数组中的每一个元素
2016/11/16 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
2017/03/31 PHP
分享XmlHttpRequest调用Webservice的一点心得
2012/07/20 Javascript
javascript克隆对象深度介绍
2012/11/20 Javascript
Express作者TJ告别Node.js奔向Go
2014/07/14 Javascript
jquery对象访问是什么及使用方法介绍
2016/05/03 Javascript
window.onload绑定多个事件的两种解决方案
2016/05/15 Javascript
浅谈JavaScript中小数和大整数的精度丢失
2016/05/31 Javascript
深入理解Angular中的依赖注入
2017/06/26 Javascript
详解jQuery中的easyui
2018/09/02 jQuery
Javascript实现贪吃蛇小游戏(含详细注释)
2020/10/23 Javascript
[27:28]Ti4 冒泡赛第二天 iG vs NEWBEE 1
2014/07/15 DOTA
Python的多态性实例分析
2015/07/07 Python
基于DataFrame筛选数据与loc的用法详解
2018/05/18 Python
python3.8 微信发送服务器监控报警消息代码实现
2019/11/05 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
2020/01/25 Python
文件上传服务器-jupyter 中python解压及压缩方式
2020/04/22 Python
python 爬取免费简历模板网站的示例
2020/09/27 Python
python归并排序算法过程实例讲解
2020/11/04 Python
解决pytorch 数据类型报错的问题
2021/03/03 Python
移动端Html5页面生成图片解决方案
2018/08/07 HTML / CSS
Woolworth官网:澳洲第一大超市
2017/06/25 全球购物
美国大码时尚女装购物网站:ELOQUII
2017/12/28 全球购物
Expedia西班牙:预订酒店、机票、旅行和廉价度假套餐
2019/04/10 全球购物
软件测试面试题
2015/10/21 面试题
自考生毕业自我鉴定
2013/10/10 职场文书
审计主管岗位职责
2014/01/31 职场文书
开展批评与自我批评发言材料
2014/10/17 职场文书
怎么写工作检讨书
2014/11/16 职场文书
幼儿园百日安全活动总结
2015/05/07 职场文书
担保公司2015年终工作总结
2015/10/14 职场文书
音乐研修感悟
2015/11/18 职场文书
Django 如何实现文件上传下载
2021/04/08 Python
Python中Selenium对Cookie的操作方法
2021/07/09 Python