广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP使用三种方法实现数据采集
  • 514
分享到

PHP使用三种方法实现数据采集

2024-04-02 19:04:59 514人浏览 泡泡鱼
摘要

目录什么叫采集?PHP制作采集的技术1. 使用Socket技术采集:2. 使用curl_一套函数3. 直接使用file_get_contents(最顶层的)3种方

什么叫采集?

就是使用php程序,把其他网站中的信息抓取到我们自己的数据库中、网站中。

PHP制作采集的技术

从底层的socket到高层的文件操作函数,一共有3种方法可以实现采集。

1. 使用socket技术采集:

socket采集是最底层的,它只是建立了一个长连接,然后我们要自己构造Http协议字符串去发送请求。

例如要想获取这个页面的内容,http://tv.youku.com/?spm=a2hww.20023042.topNav.5~1~3!2~A,用socket写如下:


<?php
//连接,$error错误编号,$errstr错误的字符串,30s是连接超时时间
$fp=fsockopen("www.youku.com",80,$errno,$errstr,30);
if(!$fp) die("连接失败".$errstr);
 
//构造http协议字符串,因为socket编程是最底层的,它还没有使用http协议
$http="GET /?spm=a2hww.20023042.topNav.5~1~3!2~A HTTP/1.1\r\n";   //  \r\n表示前面的是一个命令
$http.="Host:www.youku.com\r\n";  //请求的主机
$http.="Connection:close\r\n\r\n";   // 连接关闭,最后一行要两个\r\n
 
//发送这个字符串到服务器
fwrite($fp,$http,strlen($http));
//接收服务器返回的数据
$data='';
while (!feof($fp)) {
$data.=fread($fp,4096);  //fread读取返回的数据,一次读取4096字节
}
//关闭连接
fclose($fp);
var_dump($data);
?>

打印出的结果如下,包含了返回的头信息及页面的源码

2. 使用curl_一套函数

curl把HTTP协议都封装成了很多函数,直接传相应参数即可,降低了编写HTTP协议字符串的难度。

前提:在php.ini中要开启curl扩展。


//生成一个curl对象
$curl=curl_init();
//设置URL和相应的选项
curl_setopt($curl, CURLOPT_URL, "http://www.youku.com");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  //将curl_exec()获取的信息以字符串返回,而不是直接输出。
//执行curl操作
$data=curl_exec($curl);
var_dump($data);

打印出的结果如下,只包含页面的源码:

3. 直接使用file_get_contents(最顶层的)

前提:在php.ini中设置允许打开一个网络的url地址。


//使用file_get_contents()
$data=file_get_contents("http://www.youku.com");
var_dump($data);

3种方式的选择

网络之间通信主要使用的是以上三种。其中后两种用的较多:如果要批量采集大量的数据时使用第二种【CURL】,性能好、稳定。

偶尔发几个请求发的频繁不密集时使用第三种。

扩展:图片的防盗链如何破?

比如7060网站上的图片做了防盗链:在他的网站中可以看到图片,把图片拿到站外就无法访问。

原理:在HTTP协议中有一个referer项,代表发这个请求的来源地址,服务器会判断如果这个请求不是这个网站发来的就会过滤掉这个请求:

解决办法:发HTTP时自己模拟referer即可:

扩展:有些要采集数据时时必须先登录,可以使用模拟的试模拟在登录状态下的采集:

a. 先用浏览登录一下,登录完,浏览器的COOKIE中就会有SESSIONID

b. 发PHP发HTTP协议时,把浏览器中的SESSIONID放到PHP的HTTP协议请求里,这样就在以登录的状态发请求。

总结:所有客户端发过来的数据都可以被模拟,所以服务器上的程序必须要必要的地方过滤客户端的数据。

什么时候用以上东西?接口开发时、采集时。

数据采集

例如我要采集这个url里的所有美国电影的信息,

http://list.youku.com/cateGory/show/c_96_a_%E7%BE%8E%E5%9B%BD_s_1_d_1_p_3.html

则先要知道电影所在的节点的结构,我们使用firebug查看。

然后开始写代码:完整代码如下



function get($url)
{
   global $curl;
   // 配置curl中的http协议->可配置的荐可以查PHP手册中的curl_
   curl_setopt($curl, CURLOPT_URL, $url);
   curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
   curl_setopt($curl, CURLOPT_HEADER, FALSE);
   // 执行这个请求
   return curl_exec($curl);
}
 
// 生成一个curl对象
$curl = curl_init();
$url='http://list.youku.com/category/show/c_96_a_%E7%BE%8E%E5%9B%BD_s_1_d_1_p_3.html';
$data=get($url);
// 匹配电影所在位置
$list_preg = '/<li class="yk-col4 mr1">.+<\/li>/Us';
// 匹配img标签上的src和alt
$img_preg = '/<img class="quic" _src="(.*)" src="(.*)" alt="(.*)" \/>/U';
//匹配电影的url
$video_preg='/<a href="(.*)" rel="external nofollow"  title="(.*)" target="(.*)"><\/a>/U';
//把所有的li存到$list里,$list是个二维数组
preg_match_all($list_preg,$data,$list);
   //var_dump($list);
foreach ($list[0] as $k => $v) {   //这里$v就是每一个li标签

    
    preg_match($img_preg,$v,$img);
    preg_match($video_preg,$v,$video);
    echo $img[0].'<a href="'.$video[1].'" rel="external nofollow" >'.$video[2].'</a>';
}

测试

打印$list;

打印$img

打印$video

最终效果:

如果需要把图片拷贝到硬盘上,则在foreach循环里加上以下代码:


 $imgData = get($img[1]);
    // 把图片文件写到硬盘上【下载】
    // 因为操作系统是GBK的,所以要把UTF8转成GBK
    is_dir('./youkuimg/') ? '': mkdir('./youkuimg/');
	file_put_contents('./youkuimg/'.mb_convert_encoding($img[3], 'gbk', 'utf-8').'.jpg', $imgData);

效果如下:在当前目录下的youkuimg目录下就会有下载好的图片。

以上就是PHP使用三种方法实现数据采集的详细内容,更多关于PHP使数据采集的资料请关注编程网其它相关文章!

--结束END--

本文标题: PHP使用三种方法实现数据采集

本文链接: https://www.lsjlt.com/news/123933.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PHP使用三种方法实现数据采集
    目录什么叫采集?PHP制作采集的技术1. 使用socket技术采集:2. 使用curl_一套函数3. 直接使用file_get_contents(最顶层的)3种方...
    99+
    2022-11-12
  • php实现大数据采集
    随着互联网的不断发展,数据采集成为了人们获取信息的重要手段。然而,随着数据量的不断增加,传统的手动采集方法已经无法满足需求,因此,大数据采集技术成为了关键。在这里,我们来介绍一下php实现大数据采集的方法。一、 数据采集流程数据采集流程通常...
    99+
    2023-05-24
  • 数据采集的五种方法有哪些
    数据采集的五种方法有:1.实地调查:直接走访或观察目标群体、地点或事件,收集数据。2.问卷调查:通过设计并分发问卷,收集被调查者对特...
    99+
    2023-08-24
    数据采集
  • PHP数据采集方法有哪些
    PHP数据采集方法有以下几种:1. 使用cURL库:cURL是一个功能强大的开源库,可以用来发送HTTP请求并获取响应。通过cURL...
    99+
    2023-08-24
    PHP
  • PHP连接MySQL数据库三种实现方法
    引言 PHP与MySQL的连接有三种API接口,分别是:PHP的MySQL扩展 、PHP的mysqli扩展 、PHP数据对象(PDO) ,下面针对以上三种连接方式做下总结,以备在不同场景下选出最优方案。 PHP的...
    99+
    2022-05-23
    PHP 连接 MySQL 数据库
  • Oracle数据库分页的集中方法(三种方法)
    在 做项目中用到了分页,下面说一下oracle分页的方法; 采用伪列 rownum     查询前10条记录 [sql] select * from t_...
    99+
    2022-10-18
  • Java实现数据集合的多种方法
    ////=================显示连接型列表的使用========= import java.util.*; public class lis...
    99+
    2023-06-03
  • 怎么用PHP函数实现采集器
    本篇内容介绍了“怎么用PHP函数实现采集器”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前几天做了个小说连载的程序,因为怕更新麻烦,顺带就写...
    99+
    2023-06-17
  • 怎么用php删除数组数据?三种方法介绍
    PHP 是一门非常强大的编程语言,被广泛用于 Web 开发和应用程序开发。在 PHP 中,数组是一种非常常见的数据类型。在使用数组时,有时需要删除数组中的某些数据。本文将介绍如何在 PHP 中删除数组数据。一、使用 unset() 函数删除...
    99+
    2023-05-14
    php php数组
  • PHP实现数据库集群的方法
    随着Web应用程序和电子商务网站的不断发展,数据存储和处理的需求也日益增加。为了应对这一挑战,数据库集群成为了一种越来越受欢迎的解决方案。然而,由于各种原因,许多企业选择使用PHP作为开发语言来实现其数据库集群。本文将探讨如何使用PHP实现...
    99+
    2023-05-17
    PHP 实现方法 数据库集群
  • 总结三种常见php算法的实现方法
    PHP是一种强大的脚本语言,它在Web开发领域中广泛应用。除了在网站开发中使用,PHP还可以用于实现各种算法和数据结构。在本文中,我们将介绍三个常见的算法,包括冒泡排序、快速排序和二分查找,以及在PHP中如何实现它们。一、冒泡排序冒泡排序是...
    99+
    2023-05-14
  • 如何使用CSS实现换行(三种方法)
    换行是指在文字或者其他内容到达行末时,自动转到下一行的行为。在网页设计中,正确的换行可以使页面看起来更加舒适和自然。在CSS中,实现正确的换行需要了解一些原理和技巧。本文将为您介绍如何使用CSS实现换行的几种方法。方法一:使用word-wr...
    99+
    2023-05-14
  • Qt数据库应用之实现通用数据库采集
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码一、前言 数据库采集对应的就是上一篇文章的数据库同步,数据库同步到云端数据库以后,app、网页、小程序啥的要数据的话,可以通...
    99+
    2022-11-13
  • C++中strlen函数的三种实现方法
    目录一、strlen函数是什么二、strlen的三种实现方法1、第一种方法(直接)2、第二种方法(递归)3、第三种方法(指针-指针)四、小结一、strlen函数是什么 我们经常用到s...
    99+
    2022-11-13
  • C# 三种方式实现Socket数据接收
    目录Stream.Read 方法将数据接收放到 while (true)Stream.Read 方法 当在派生类中重写时,从当前流读取字节序列,并将此流中的位置提升读取的字节数。 语...
    99+
    2022-11-12
  • PHP实现MongoDB数据库集群的方法
    随着互联网的发展,数据量呈现爆炸式增长,如何处理海量数据成为了关键。MongoDB是一种NoSQL数据库,具有性能高、可扩展性强、数据结构灵活等特点,因此在大数据领域得到了广泛应用。为了更好地应对数据量的增长,实现高可用和高效率的数据处理,...
    99+
    2023-05-19
    PHP MongoDB 集群
  • PHP实现Redis数据库集群的方法
    Redis是一种常用的内存数据库,其具有高速读写、丰富的数据结构以及持久化等特点,已经成为了Web应用程序中非常重要的工具之一。随着业务的扩张和数据量的增大,单台Redis服务器已经难以满足业务需求,此时就需要使用Redis数据库集群来保证...
    99+
    2023-05-15
    PHP redis 集群
  • PHP实现Memcached数据库集群的方法
    随着互联网应用的快速发展,数据存储和处理变得越来越庞大和复杂。在这样的背景下,Memcached作为一款高性能、轻量级的分布式内存缓存系统,逐渐成为互联网应用领域中不可或缺的一部分。在PHP语言中,Memcached可以通过扩展内置的Mem...
    99+
    2023-05-15
    PHP memcached 数据库集群
  • PHP实现Oracle数据库集群的方法
    在当前的互联网时代下,高可用性的需求变得越来越大。而数据库作为企业数据的核心,需要满足在面临各种异常情况时依然保持业务的正常运行。因此,数据库集群成为了当前较为流行的实现高可用性解决方案之一。本文将介绍如何使用PHP实现Oracle数据库集...
    99+
    2023-05-17
    PHP Oracle 集群
  • 聊聊php查询数据库行数的采用多种方式
    随着互联网时代的发展,数据库的应用越来越广泛,而对数据库查询行数的需求也越来越多。在PHP语言中,查询数据库行数是一项比较基础的操作,实现这个功能可以采用多种方式。一、使用mysql_num_rows()函数查询行数mysql_num_ro...
    99+
    2023-05-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作