PHP 数据抓取

PHP 数据抓取, CURL比较容易

这里说下, 两次抓取的情况, 第二次请求需要第一次数据抓取的结果

例如: 数据提交的时候需要页面上的token

抓取流程. 

1. 抓取页面, 分析页面获取token

2. 提交数据, 带上第一次获取的token

存在的问题

token是在后台通过session保存起来的

而步骤1抓取数据的时候跟步骤2抓取数据的时候

curl请求实际上是视为2次不同的请求, 所以sessionid并不一样

导致第二次请求就算是带上了第一次获取到的token

数据仍然是验证不通过的

解决方案:

关键部分 CURLOPT_COOKIEJAR 采用cookie存储请求的数据

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); // 要访问的地址
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 对认证证书来源的检查
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.69 Safari/537.36"); // 模拟用户使用的浏览器
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
curl_setopt($ch, CURLOPT_COOKIEJAR, './cookie.txt');  // 关键部分, 使用cookie存储
curl_setopt($ch, CURLOPT_POST, 1); // 发送一个常规的Post请求
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // Post提交的数据包
curl_setopt($ch, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
curl_setopt($ch, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
$response = curl_exec($ch);
curl_close($ch);

 

你可能感兴趣的:(php,curl)