php爬虫技术1


PHP抓取函数

1. file                 把整个文件读入一个数组中
2. file_get_contents    把整个文件读入一个字符串中
3. curl                 libcurl库

1. file() 把整个文件读入一个数组中

参数 描述
path 必需。规定要读取的文件。
include_path 可选。如果也想在 include_path 中搜寻文件的话,可以将该参数设为 "1"。
context 可选。规定文件句柄的环境。是一套可以修改流的行为的选项。若使用 null,则忽略。

示例:

    //抓取的网址
    $url = 'http://news.people.com.cn/210801/211150/index.js';
    //将读取内容存在数组中
    $arr = file($url);
    print_r($arr);

2. file_get_contents() 把整个文件读入一个字符串中

参数 描述
path 必需。规定要读取的文件。
include_path 可选。如果也想在 include_path 中搜寻文件的话,可以将该参数设为 "1"。
context 可选。规定文件句柄的环境。是一套可以修改流的行为的选项。若使用 null,则忽略。
start 可选。规定在文件中开始读取的位置。该参数是 PHP 5.1 新加的。
max_length 可选。规定读取的字节数。该参数是 PHP 5.1 新加的。

示例:

    //抓取的网址
    $url = 'http://news.people.com.cn/210801/211150/index.js';
    //将读取内容存在字符串中
    $arr = file_get_contents($url);
    echo $arr;

3. curl() libcurl库

常用函数 描述
curl_init() 初始化 cURL 会话
curl_setopt() 设置 cURL 传输选项
curl_exec() 执行 cURL 会话
curl_errno() 返回最后一次的错误代码
curl_close() 关闭 cURL 会话

需要重点说下:
curl_setopt() 设置 cURL 传输选项
curl 可以post提交
curl 可以获取https

curl_setopt 参数 描述
ch 由 curl_init() 返回的 cURL 句柄
option 需要设置的CURLOPT_XXX选项。(curl的关键部分,看下面示例)
vlues 设置值

示例:

header("Content-Type: text/html;charset=utf8");
// url可以是文件,可以是pc页面,也可以是接口
// $url = 'https://mat1.gtimg.com/pingjs/ext2020/configF2017/5a9cf828.js';
$url = 'http://news.cctv.com';
// $url = 'https://pacaio.match.qq.com/irs/rcd?cid=146&token=49cbb2154853ef1a74ff4e53723372ce&ext=ent&page=2';
$ch = curl_init();                          // 创建一个新cURL资源
curl_setopt($ch, CURLOPT_URL, $url);        // 设置URL
curl_setopt($ch, CURLOPT_TIMEOUT, 30);      // 设置超时限制防止死循环
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);// 爬取重定向页面
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);   // 自动设置Referer,防止盗链
curl_setopt($ch, CURLOPT_POST, 1);          // 发送一个常规的Post请求
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);// Post提交的数据包
curl_setopt($ch, CURLOPT_HEADER, 0);        // 显示返回的Header区域内容
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 要求结果保存到字符串中还是输出到屏幕上
// 禁用SSL证书的验证,就可以解决HTPPS获取不到的问题
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);// 对认证证书来源的检查
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);// 从证书中检查SSL加密算法是否存在
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); // 默认值,让 cURL 自己判断使用哪个版本。 (强制使用 HTTP/1.1)。
curl_setopt($ch, CURLOPT_USERAGENT, 'Data'); // 在HTTP请求中包含一个"User-Agent: "头的字符串。

$html = curl_exec($ch);                     // 运行cURL,请求URL,把结果复制给变量
if(curl_errno($ch)){
    echo 'Errno'.curl_error($curl);         //捕抓异常  
}
curl_close($ch);                            // 关闭cURL连接
print_r($html);