Tp5+QueyrList简单爬取

Tp5+QueryList简单爬取,图片本地下载

直接上代码

	public function index(Request $request)
	{
	     $page = $request->param('id');

		//return 2;
		
		//采集地址
		$url = "https://www.chinapp.com/pinpai/zhuangxiujiancai-0-0-$page";//255
		//规则一
		$rule_one = [
			'href' => ['.company_intro_shop>a','href'], //详情地址
			'introduce' => ['.company_intro','text'] //公司简介
		];
		//规则二
		$rule_two = [
			'title' => ['.pjct_xm_intro>a','text'], //设备标题
			'company' => ['.company','text'], //所属公司
			'product' => ['.zypro>span','text'], //主营产品
			'company_img' => ['.pjct_xm_imgs>img','src'], //公司图片
			'details' => ['.brd_jx>.brd_jx_intro>p','text'], //详情介绍
			'details_img' => ['.brd_jx_imgs>img','src'] //详情图片
		];
		//采集详情地址
		$data = QueryList::get($url)->rules($rule_one)->range('.pplb_item')->queryData();
		
		//var_dump($data);
		
		//拼接条件
		$fake_url = "https://www.chinapp.com";
		foreach ($data as $key => $value)
		{
			//拼接地址
			$true_url = $fake_url . $value['href'];
//			//采集需要信息
			$arr = QueryList::get($true_url)->rules($rule_two)->queryData();
			//var_dump($arr);
			//采集以下信息
			$ql = QueryList::get("$true_url");
			//法定代表人
			$arr['representative'] = $ql->find('.newAdd_pjct_xm_intro>li')->eq(0)->text();
			//电话
			$arr['tel']= $ql->find('.newAdd_pjct_xm_intro>li')->eq(1)->text();
			//品牌发源地
			$arr['address'] = $ql->find('.newAdd_pjct_xm_intro>li')->eq(2)->text();
			//品牌创立时间
			$arr['bct'] = $ql->find('.newAdd_pjct_xm_intro>li')->eq(3)->text();
			
			//var_dump($arr);die;
			//入库信息
			$warehousing[] = [
				'uid' => 1,
				'introduce' => $value['introduce'],//公司简介
				'title' => $arr['title'], //品牌标题
				'company' => substr($arr['company'],15), //所属公司
				'product' => $arr['product'], //主营产品
				'company_img' => strrchr($arr['company_img'],'/'), //处理完成的公司图片
				'fake_company_img' => $arr['company_img'], //未处理的公司图片
				'details' => $arr['details'], //详情介绍
				'details_img' => strrchr($arr['details_img'],'/'), //处理完成的详情图片
				'fake_details_img' => $arr['details_img'], //未处理详情图片
				'representative' => substr($arr['representative'],18), //法定代表人
				'tel' => substr($arr['tel'],18), //电话
				'address' => substr($arr['address'],18), //品牌发源地
				'bct' => substr($arr['bct'],21), //品牌创立时间
				'create_time' => date('Y-m-d H:i:s')
			];
			
			
			//查重
			if ( !empty( $dc = Db::table()->where('title',$warehousing[0]['title'])->select()->toArray() ))
			{
				var_dump($dc);
				return '数据已存在';
				echo "<br />";
				continue;
			}
			
		}
//		var_dump($dc);
		//var_dump($warehousing[0]['title']);die;
		$con = count($warehousing);
		echo "一共".$con."条数据";
		echo "<br />";
		
		
		foreach ($warehousing as $k => $v)
		{
			
			$data = $this->getImage($v['fake_company_img'],'public/zhuangxiu',$v['company_img']);
			$this->getImage($v['fake_details_img'],'public/zhuangxiu',$v['details_img']);
		}
		
		if ($data['error'] != 0)
		{
			return '图片下载失败';
		}
		else
		{
			$res = Db::table()
				->insertAll($warehousing);
			
			echo "入库成功".$res."条数据";
			echo "<br />";
		}
		
	}
	
	
	
	/*
	*功能:php完美实现下载远程图片保存到本地
	*参数:文件url,保存文件目录,保存文件名称,使用的下载方式
	*当保存文件名称为空时则使用远程文件原来的名称
	*转载
	*/
	function getImage($url,$save_dir='',$filename='',$type=0)
	{
		if (trim($url) == '')
		{
			return array('file_name' => '', 'save_path' => '', 'error' => 1);
		}
		if (trim($save_dir) == '') {
			$save_dir = './';
		}
		if (trim($filename) == '')
		{   //保存文件名
			$ext = strrchr($url, '.');
			if ($ext != '.gif' && $ext != '.jpg' && $ext != '.png' && $ext != '.jpeg')
			{
				return array('file_name' => '', 'save_path' => '', 'error' => 3);
			}
			$filename = time() . $ext;
		}
		if (0 !== strrpos($save_dir, '/'))
		{
			$save_dir .= '/';
		}
		//创建保存目录
		if (!file_exists($save_dir) && !mkdir($save_dir, 0777, true))
		{
			return array('file_name' => '', 'save_path' => '', 'error' => 5);
		}
		//获取远程文件所采用的方法
		if ($type)
		{
			$ch = curl_init();
			$timeout = 800;
			curl_setopt($ch, CURLOPT_URL, $url);
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
			curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
			$img = curl_exec($ch);
			curl_close($ch);
		}
		else
		{
			ob_start();
			readfile($url);
			$img = ob_get_contents();
			ob_end_clean();
		}
		//$size=strlen($img);
		//文件大小
		$fp2 = @fopen($save_dir . $filename, 'a');
		fwrite($fp2, $img);
		fclose($fp2);
		unset($img, $url);
		return array('file_name' => $filename, 'save_path' => $save_dir . $filename, 'error' => 0);
		
	}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]:LayTab类是一个用于将数据转换成layui需要的数据形式的工具类。它包含了一些属性和方法,用于设置数据的格式和内容。\[1\]引用\[2\]:在具体功能的实现中,页面主要是对所有的信息进行查询,并将其显示出来。利用layui的数据表格来将数据显示在前端的页面上。首先需要在自己的jsp页面上复制layui官网上提供的数据表格代码,并进行相应的修改。\[2\]引用\[3\]:页面主要实现了查询所有、添加书籍、修改书籍、删除书籍、书籍的上下架和模糊搜索等功能。具体流程如下:首先查询数据库中的数据表信息,并将其显示在页面中;然后通过点击添加按钮,弹出层显示添加书籍的表单;接着通过点击修改按钮,弹出层显示修改书籍的表单;再通过点击删除按钮,删除书籍;还可以对书籍进行上下架操作;最后可以进行模糊搜索。\[3\] 根据你的问题,TP5+layui增删改查的实现可以参考以下步骤: 1. 首先需要在TP5中配置数据库连接和相关的模型(Model)。 2. 在控制器(Controller)中编写相应的方法,用于处理增删改查的请求。 3. 在视图(View)中使用layui的数据表格来显示数据,并添加相应的按钮和表单。 4. 在前端页面中,通过ajax请求将数据发送到后端进行处理,并将结果显示在页面上。 5. 根据需要,可以使用TP5的验证器(Validator)来对用户输入的数据进行验证。 6. 在控制器中根据请求的类型(增删改查)来执行相应的操作,并返回相应的结果。 通过以上步骤,你可以实现TP5+layui的增删改查功能。具体的代码实现可以根据你的需求进行相应的调整和修改。 #### 引用[.reference_title] - *1* *2* *3* [layui实现增删改查——图书管理](https://blog.csdn.net/weixin_42381196/article/details/118058698)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值