关于数据采集
来源:互联网 发布:java的socket 编辑:程序博客网 时间:2024/05/16 04:39
http://news.163.com/special/00013C0B/gedixw.html
curl定义
是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等
案例介绍
信息采集时通过程序将非结构化的信息从大量的网页中抽取出来保存到结构化的数据库中,在最短的时间内把最新的信息从不同的Internet站点上抓取下来,提高信息及时性和节省或减少工作量。
信息采集原理
要获取其他网站的数据首先要获取网页内容,然后在网页内容中提取我们需要的数据。要获取网站数据可以通过程序获取网站源码,然后通过正则表达式匹配出所需数据保存到数据库中。
实现采集常用函数
curl系列函数
Snoopy封装类
file_get_contents()
核心知识点
curl
snoopy
file_get_contents()
核心知识点curl实现
// 1. 初始化
$ch = curl_init();
// 2. 设置选项,包括URL
curl_setopt($ch, CURLOPT_URL, "http://www.nettuts.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//将获得到的内容返回
curl_setopt($ch, CURLOPT_HEADER, 0);//不输出头信息
// 3. 执行并获取HTML文档内容
$output = curl_exec($ch);
// 4. 释放curl句柄
curl_close($ch);
错误处理
$output = curl_exec($ch);
if ($output === FALSE) {
echo "cURL Error: " . curl_error($ch);
}
// ...
请注意,比较的时候我们用的是“=== FALSE”,而非“== FALSE”。因为我们得区分 空输出 和 布尔值FALSE,后者才是真正的错误
获取信息
这是另一个可选的设置项,能够在cURL执行后获取这一请求的有关信息:
curl_exec($ch);
$info = curl_getinfo($ch);
echo '获取'. $info['url'] . '耗时'. $info['total_time'] . '秒';
// ...
返回的数组中包括了以下信息:
* “url” //资源网络地址
* “content_type” //内容编码
* “http_code” //HTTP状态码
* “header_size” //header的大小
* “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”//重定向耗时
模拟post方式传递数据
$url = "http://localhost/post_output.php";
$post_data = array (
"foo" => "bar",
"query" => "Nettuts",
"action" => "Submit"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); //设置请求地址
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//返回请求的信息
// 我们在POST数据哦!
curl_setopt($ch, CURLOPT_POST, 1);
// 把post的变量加上
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);
curl_close($ch);
echo $output;
附件上传
$url = "http://localhost/upload_output.php";
$post_data = array (
"foo" => "bar",
// 要上传的本地文件地址
"upload" => "@C:/wamp/www/abc.jpg"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);
curl_close($ch);
echo $output;
如果你需要上传一个文件,只需要把文件路径像一个post变量一样传过去,不过记得在前面加上"@"符号。执行这段脚本应该会得到如下输出
array(
[upload] => array(
[name] => test.zip
[type] => image/jpeg
[name] => d:\wamp\tmp\php4ccb.jpg
[error] => 0
[size] => 11836
)
)
核心知识点snoopy实现信息采集及具体实现
require_once('Snoopy.class.php' );//引入 Snoopy 类
$snoopy =new Snoopy();
$url = 'http://news.163.com/special/00013C0B/gedixw.html';
//$snoopy->fetch($url);//抓取指定的网页
//$snoopy->fetchtext($url); //除去 HTML 标签和其他无关信息
//$snoopy->fetchform($url); //返回抓取的网页上 form 元素
$snoopy->fetchlinks($url); //抓取的网页上的链接
//$snoopy->submit($url,$formvars);//提交表单到$url。$formvars是要传递的变量数组,例:array('user' =>'admin','pwd' => 'admin');
//$snoopy->submittext($url,$formvars);//同submit,只是去除HTML标签和无关信息
//$snoopy->submitlinks($url,$formvars);//返回链接
$data = $snoopy->results;
print_r($data);//打印结果
file_get_contents使用
使用file_get_contents()函数是信息采集中常用的函数但是有些网站为了防止采集采用了一些防范机制,比如判断是否是浏览器访问等,这时使用这个函数就不可靠了。前面在支付接口时已经接触过fsockopen这个函数,其实这个函数不仅可以提交数据还可以发送其他header头信息模拟浏览器访问,用法是打开套接字连接后,将要发送的头信息以属性名: 属性值的格式拼装成字符串,使用fputs(fwrite)函数即可,例如模拟火狐浏览器:
具体实现
$detail = file_get_contents('http://news.163.com/11/0529/14/757S0JGT00014JB5.html');
file_put_contents('curl1.html', $detail);
上述做法缺乏灵活性和有效的错误处理。而且,你也不能用它完成一些高难度任务——比如处理coockies、验证、表单提交、文件上传等等。
案例练习
通过程序采集新浪网某新闻列表下面的所有新闻标题,发布时间,作者,内容保存到数据库中。
自学内容
通过PHP手册与网上搜索,学会使用curl系列函数做信息采集
技术文化分享
什么是跨域?
跨域访问就是你在一个域环境下,访问另一个域的内容。
因为javascript同源策略的限制,a.com 域名下的js脚本无法操作b.com或是c.a.com域名下的对象。
Ajax的应用中,由于安全的问题,浏览器默认是不支持 javascript跨域调用的。
1.主域相同,子域不同,如xxx.aaa.com和yyy.aaa.com
2.域名相同,端口不同,如xxx.aaa.com:8000和 xxx.aaa.com
3.域名相同,协议不同,如http://www.aaa.com/和 https://www.aaa.com/
4.主机相同,用ip和域名的,http://127.0.0.1/和 http://localhost/
curl定义
是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等
案例介绍
信息采集时通过程序将非结构化的信息从大量的网页中抽取出来保存到结构化的数据库中,在最短的时间内把最新的信息从不同的Internet站点上抓取下来,提高信息及时性和节省或减少工作量。
信息采集原理
要获取其他网站的数据首先要获取网页内容,然后在网页内容中提取我们需要的数据。要获取网站数据可以通过程序获取网站源码,然后通过正则表达式匹配出所需数据保存到数据库中。
实现采集常用函数
curl系列函数
Snoopy封装类
file_get_contents()
核心知识点
curl
snoopy
file_get_contents()
核心知识点curl实现
// 1. 初始化
$ch = curl_init();
// 2. 设置选项,包括URL
curl_setopt($ch, CURLOPT_URL, "http://www.nettuts.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//将获得到的内容返回
curl_setopt($ch, CURLOPT_HEADER, 0);//不输出头信息
// 3. 执行并获取HTML文档内容
$output = curl_exec($ch);
// 4. 释放curl句柄
curl_close($ch);
错误处理
$output = curl_exec($ch);
if ($output === FALSE) {
echo "cURL Error: " . curl_error($ch);
}
// ...
请注意,比较的时候我们用的是“=== FALSE”,而非“== FALSE”。因为我们得区分 空输出 和 布尔值FALSE,后者才是真正的错误
获取信息
这是另一个可选的设置项,能够在cURL执行后获取这一请求的有关信息:
curl_exec($ch);
$info = curl_getinfo($ch);
echo '获取'. $info['url'] . '耗时'. $info['total_time'] . '秒';
// ...
返回的数组中包括了以下信息:
* “url” //资源网络地址
* “content_type” //内容编码
* “http_code” //HTTP状态码
* “header_size” //header的大小
* “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”//重定向耗时
模拟post方式传递数据
$url = "http://localhost/post_output.php";
$post_data = array (
"foo" => "bar",
"query" => "Nettuts",
"action" => "Submit"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); //设置请求地址
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//返回请求的信息
// 我们在POST数据哦!
curl_setopt($ch, CURLOPT_POST, 1);
// 把post的变量加上
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);
curl_close($ch);
echo $output;
附件上传
$url = "http://localhost/upload_output.php";
$post_data = array (
"foo" => "bar",
// 要上传的本地文件地址
"upload" => "@C:/wamp/www/abc.jpg"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);
curl_close($ch);
echo $output;
如果你需要上传一个文件,只需要把文件路径像一个post变量一样传过去,不过记得在前面加上"@"符号。执行这段脚本应该会得到如下输出
array(
[upload] => array(
[name] => test.zip
[type] => image/jpeg
[name] => d:\wamp\tmp\php4ccb.jpg
[error] => 0
[size] => 11836
)
)
核心知识点snoopy实现信息采集及具体实现
require_once('Snoopy.class.php' );//引入 Snoopy 类
$snoopy =new Snoopy();
$url = 'http://news.163.com/special/00013C0B/gedixw.html';
//$snoopy->fetch($url);//抓取指定的网页
//$snoopy->fetchtext($url); //除去 HTML 标签和其他无关信息
//$snoopy->fetchform($url); //返回抓取的网页上 form 元素
$snoopy->fetchlinks($url); //抓取的网页上的链接
//$snoopy->submit($url,$formvars);//提交表单到$url。$formvars是要传递的变量数组,例:array('user' =>'admin','pwd' => 'admin');
//$snoopy->submittext($url,$formvars);//同submit,只是去除HTML标签和无关信息
//$snoopy->submitlinks($url,$formvars);//返回链接
$data = $snoopy->results;
print_r($data);//打印结果
file_get_contents使用
使用file_get_contents()函数是信息采集中常用的函数但是有些网站为了防止采集采用了一些防范机制,比如判断是否是浏览器访问等,这时使用这个函数就不可靠了。前面在支付接口时已经接触过fsockopen这个函数,其实这个函数不仅可以提交数据还可以发送其他header头信息模拟浏览器访问,用法是打开套接字连接后,将要发送的头信息以属性名: 属性值的格式拼装成字符串,使用fputs(fwrite)函数即可,例如模拟火狐浏览器:
具体实现
$detail = file_get_contents('http://news.163.com/11/0529/14/757S0JGT00014JB5.html');
file_put_contents('curl1.html', $detail);
上述做法缺乏灵活性和有效的错误处理。而且,你也不能用它完成一些高难度任务——比如处理coockies、验证、表单提交、文件上传等等。
案例练习
通过程序采集新浪网某新闻列表下面的所有新闻标题,发布时间,作者,内容保存到数据库中。
自学内容
通过PHP手册与网上搜索,学会使用curl系列函数做信息采集
技术文化分享
什么是跨域?
跨域访问就是你在一个域环境下,访问另一个域的内容。
因为javascript同源策略的限制,a.com 域名下的js脚本无法操作b.com或是c.a.com域名下的对象。
Ajax的应用中,由于安全的问题,浏览器默认是不支持 javascript跨域调用的。
1.主域相同,子域不同,如xxx.aaa.com和yyy.aaa.com
2.域名相同,端口不同,如xxx.aaa.com:8000和 xxx.aaa.com
3.域名相同,协议不同,如http://www.aaa.com/和 https://www.aaa.com/
4.主机相同,用ip和域名的,http://127.0.0.1/和 http://localhost/
0 0
- 关于NuDaqPci 数据采集
- 关于数据采集
- 关于网站数据采集的澄清
- 关于数据采集工作的一些感受
- 采集数据
- 数据采集
- 数据采集
- 关于 数据采集卡模拟器2.0 测试版
- 请教各位高手关于数据采集优化问题
- 关于底层能采集到的数据按类型分类
- 关于手机采集摄像头视频socket实时传播 (由服务端采集发送数据)
- 关于采集器开发
- 网页数据采集系统
- 高速数据采集系统
- 数据采集类
- Asp.net 数据采集
- 数据采集器
- 占位:数据采集器
- Spring Boot(四)通用CRUD案例、异常统一处理
- AOJ.559 丢失的数字
- XML-Range解析
- STM32单片机串口下载程序的简单原理和设置
- jquery 数组合并
- 关于数据采集
- [转] 先验概率 后验概率 似然 极大似然估计 极大后验估计 共轭 概念
- java foreach Iterator 性能差别
- Java_servlet_配置文件
- Windows服务编写综述
- moveTaskToback退后台
- Eclipse中创建新的Spring Boot项目
- POJ 1005-I Think I Need a Houseboat
- SAP修改消息内容和报错类型(SE91和OBA5)