What is collection? It is to use PHP programs to capture information from other websites into our own database and website. This article mainly shares with you three methods of data collection in PHP. I hope it can help you.
PHP production and collection technology:
From the underlying socket to the high-level file operation function, there are a total of 3 methods to achieve collection.
1. Use socket technology to collect:
Socket collection is the lowest level, it just establishes a long connection, and then we have to do it ourselves Construct the http protocol string to send the request.
<?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); ?>
The printed result is as follows, including the returned header information and the source code of the page:
2. Use curl_a set of functions
curl encapsulates the HTTP protocol into many functions. Just pass the corresponding parameters directly, which reduces the difficulty of writing HTTP protocol strings.
Prerequisite: The curl extension must be enabled in php.ini.
//生成一个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);
The printed results are as follows, including only the source code of the page:
3. Use file_get_contents directly (the top level)
Prerequisite: Set the url address that allows opening a network in php.ini.
[php] view plain copy
//使用file_get_contents() $data=file_get_contents("http://www.youku.com"); var_dump($data);
Selection of 3 methods
The above three methods are mainly used for communication between networks. The latter two are more commonly used: if you want to collect a large amount of data in batches, use the second [CURL], which has good performance and stability.
Use the third method when sending a few requests occasionally but not frequently and intensively.
Extension: How to break the anti-leeching of pictures?
For example, the pictures on the 7060 website are protected from hotlinking: the pictures can be seen on his website, but cannot be accessed outside the site.
Principle: There is a referer item in the HTTP protocol, which represents the source address of the request. The server will determine if If this request is not from this website, it will be filtered out:
Solution: Simulate it yourself when sending HTTP Just referer:
Extension: Some data must be collected when you need to log in first. You can use the simulated trial simulation to log in. Collection under status:
a. First log in using browser. After logging in, there will be SESSIONID
b in the COOKIE of the browser. . When sending PHP to send HTTP protocol, put the SESSIONID in the browser into PHP's HTTP protocol request, so that the request is sent in the logged in state.
Summary: All data sent by the client can be simulated, so the program on the server must filter the client data where necessary.
When should I use the above? During interface development and collection.
2. Data collection
For example, I want to collect information about all American movies in this URL,
You must first know the structure of the node where the movie is located. We use firebug to view it.
Then start writing the code: The complete code is as follows
/** * 发一个GET请求获取数据 */ 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 lazy" src="/static/imghwm/default1.png" data-src="(.*)" _ alt="(.*)" \/>/U'; //匹配电影的url $video_preg='/<a href="(.*)" 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); //把匹配到的图片的信息存到$img里 var_dump($img); */ /*获取电影地址 preg_match($video_preg,$v,$video); //把匹配到的电影的信息存到$video里 var_dump($video); */ preg_match($img_preg,$v,$img); preg_match($video_preg,$v,$video); echo $img[0].'<a href="'.$video[1].'">'.$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目录下就会有下载好的图片。
相关推荐:
The above is the detailed content of 3 ways to implement data collection in PHP. For more information, please follow other related articles on the PHP Chinese website!

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

在PHP中,可以利用implode()函数的第一个参数来设置没有分隔符,该函数的第一个参数用于规定数组元素之间放置的内容,默认是空字符串,也可将第一个参数设置为空,语法为“implode(数组)”或者“implode("",数组)”。

转化方法:1、使用“mb_substr($url,stripos($url,"?")+1)”获取url的参数部分;2、使用“parse_str("参数部分",$arr)”将参数解析到变量中,并传入指定数组中,变量名转为键名,变量值转为键值。

PHP学习笔记:网络爬虫与数据采集引言:网络爬虫是一种自动从互联网上抓取数据的工具,它可以模拟人的行为,浏览网页并收集所需的数据。PHP作为一种流行的服务器端脚本语言,在网络爬虫和数据采集领域也发挥了重要的作用。本文将介绍如何使用PHP编写网络爬虫,并提供实际的代码示例。一、网络爬虫的基本原理网络爬虫的基本原理是通过发送HTTP请求,接收并解析服务器响应的H

去除方法:1、使用substr_replace()函数将首位数字替换为空字符串即可,语法“substr_replace($num,"",0,1)”;2、用substr截取从第二位数字开始的全部字符即可,语法“substr($num,1)”。

去掉方法:1、用substr_replace()删除右边n位置开始的全部字符,语法“substr_replace($str,"",-n)”,参数“n”为需要去除的字符个数;2、用substr(),语法“substr($str,0,-n)”。

php有操作时间的方法。php中提供了丰富的日期时间处理方法:1、date(),格式化本地日期和时间;2、mktime(),返回日期的时间戳;3、idate(),格式化本地时间为整数;4、strtotime(),将时间字符串转为时间戳等等。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function

Dreamweaver Mac version
Visual web development tools

Notepad++7.3.1
Easy-to-use and free code editor

VSCode Windows 64-bit Download
A free and powerful IDE editor launched by Microsoft
