curl 抓取网页(那要耗时cURL的精髓就在于如何配置参数?(一))
优采云 发布时间: 2022-01-12 01:08curl 抓取网页(那要耗时cURL的精髓就在于如何配置参数?(一))
* "header_size" // 标题的大小
* "request_size" // 请求的大小
* "filetime" // 文件创建时间
* "ssl_verify_result" //SSL验证结果
* "redirect_count" //重定向技术
* "total_time" //总时间
* "namelookup_time" // DNS 查询时间
* "connect_time" //等待连接时间
* "pretransfer_time"//传输前的准备时间
* "size_upload" //上传数据的大小
* "size_download" // 下载数据的大小
* "speed_download" // 下载速度
* "speed_upload" //上传速度
*"download_content_length"//下载内容的长度
* "upload_content_length"//上传内容的长度
* "starttransfer_time" // 开始传输的时间
*"redirect_time"//重定向耗时
cURL的本质是如何配置参数:
bool curl_setopt(int ch ,string option mixedvalue);
curl_setopt() 函数将为 CURL 会话设置选项。 option参数就是你想要的设置,value就是这个option给出的值。
在国际电联书架上的应用:
下面简单说一下登录的实现。技术难点在于正确配置curl的请求参数。
第一次请求登录页面时,可以获得会话session_id。但必须注意:
curl_setopt($con,CURLOPT_HEADER,1);//非零值为输出头
这个配置可以输出返回的header,从而可以在返回的内容中捕捉到header。
简单解释一下这个session_id
首先要明白,服务器和用户之间的会话是通过一个会话会话来确认请求来自同一个用户,并且这个存储在服务器中,一个存储在用户的浏览器中作为 cookie。
如何获得?
首先,调试的时候,打印整个内容,print_r($content),这样就可以看到整个header了;
其次,你可以使用一个调试软件fiddler,它可以监控浏览器或进程的http请求/响应。它非常强大。我写大书架的时候用过。
,可以清楚的看到服务器返回的header中明确设置了cookie名称为ASP.NET_SessionId。那么我们在提交表单或者请求页面的时候,一定要带上这个cookie,这样服务器才能认为是同一个用户在操作。
具体配置参数如下:
curl_setopt($conn,CURLOPT_COOKIESESSION,true);//启用时curl只会传递一个sessioncookie而忽略其他cookie。默认情况下,curl 会将所有 cookie 返回到服务器。会话 cookie 是指存在用于确定服务器端会话是否有效的那些 cookie。
curl_setopt($conn,CURLOPT_COOKIE,'ASP.NET_SessionId='.$session_id);//传递收录HTTPcookie的标头连接。
这样在再次提交表单或请求页面时会收录id。可以说,只要登录成功,一直拿着这个“钥匙”,就可以爬取这个网站的所有页面的内容。
从图中可以看出,当登录请求发出时,表单内容和session_id结果被POST,服务器返回一个302跳转头。证明登录成功,并且还收录key(在请求这个网站的其他url时使用)。
当然,这个配置只针对某一个网站(不带验证码),对于有验证码的人来说是很麻烦的。
关于cURL多线程爬取,貌似会消耗大量CPU和时间。有时间我会研究这个。
第一次写这么长的博文大约花了一个小时,作为学习笔记来记忆。