数据采集采集原理分析
数据采集是指获取指定网站的内容(比如小说的标题、简介、作者、图片等信息),之后将其存入数据库中,采集步骤如下:
第1步:获取指定网址的数据
http://www.qidian.com?id=1&articleid=6
获取数据可以使用如下函数:
(1) file_get_contents()函数
(2) fopen()函数、fread()函数
(3) curl()函数
(4) snoopy类
第2步:提取所需内容,使用preg_match_all()函数获取匹配的数据
使用正则表达式获取需要采集的特定内容,获取与表中字段对应的内容。
第3步:分类存储至数据库中(入库)
将上一面获取的数据存放数据表中。
第4步:从数据库中读取数据
第5步:展示读取出的数据
正则表达式
使用正则表达式可以匹配、检索字符串。
$reg='/^….$/';
$reg='#^….$#';
量词
· + 匹配任何至少包含一个前导字符串
· * 匹配任何包含零个或多个前导字符串
· ? 匹配任何包含零个或一个前导字符串
· . 匹配任意字符串
· {x} 匹配任何包含x 个的前导字符串 /y{3}/ yyy
· {x,y} 匹配任何包含x 到y 个前导字符串 /y{2,5}/
· {x,} 匹配任何包含至少x 个前导字符串 /y{2,}/
· $ 匹配字符串的行尾 /abc[0-9]$/
· ^ 匹配字符串的行首
· | 匹配字符串的左边或者右边(或)
· ()包围一个字符分组或定义个反引用,可以使用$1,$2 提取 ([0-9]{3}-[0-9]{8})+
.*可以匹配任意字符串(因为.匹配任意字符,*表示任意个)
元字符
· [a-z] 匹配任何包含小写字母a-z 的字符串
· [c-g] 匹配c,d,e,f,g [3-7]
· [A-Z] 匹配任何包含大写字母A-Z 的字符串
· [0-9] 匹配任何包含数字0-9 的字符串
· [bek] 匹配任何包含小写字母b、e、k的字符串,只要字符串中含有b、e、k中的任意一个就算匹配到 goo[bek]d
· [^bek] 只要有不含b、e、k的字符都能匹配
· [a-zA-Z0-9_] 匹配任何包含a-zA-Z0-9 和下划线的字符串
· w 匹配任何包含a-zA-Z0-9 和下划线的字符串(同上)
· W 匹配任何没有下划线和字母数字的字符串,和w相反
· d 匹配任何数字字符,和[0-9]相同
· D 匹配任何非数字字符,和[^0-9]相同
· s 匹配任何空白字符
· S 匹配任何非空白字符
· b 匹配是否到达了单词边界 /abcb/ helloabcgood
· B 匹配是否没有达到单词边界
· 匹配正则中的特殊字符
修饰符
语法:修饰符放在"/"的后面 /w/i
· i 完成不区分大小写的搜索
· m 在匹配首内容或者尾内容时候采用多行识别匹配
· x 忽略正则中的空白
· A 强制从头开始匹配
· U 禁止贪婪匹配只跟踪到最近的一个匹配符并结束 /xo*/U xoooobc
正则相关函数
· preg_match('/正则表达式/' , 要处理的字符串);
匹配到一次就终止继续匹配,返回1;
如果没有匹配到,就一直向后找,直到字符串的末尾,如果仍然没找到,返回0。
匹配邮箱
· preg_match_all('/正则表达式/',字符串,$arr)
preg_match_all()搜索字符串所有匹配的结果,将所有匹配到的字符串放到$arr数组中。
· preg_replace('/正则表达式/', '字符串', $str);
将$str中匹配正则规则的内容用指定字符串替换。
采集入库
采集网页中列表的标题和链接,获取后存入数据库。
Snoopy
snoopy类实现数据采集
output()函数的功能是格式化输出数组数据
fetch()方法
Fetchtext()、fetchlinks()、fetchform()方法
Snoopy实现表单提交和模拟登陆
Snoopy实现图片下载
cURL1. Client URL库
开启curl扩展
使用cURL完成请求的四步
第1步:初始化资源 $ch = curl_init();
第2步: 设置相关的参数 curl_setopt()
第3步: 发送请求 curl_exec($ch)
第4部:关闭资源 curl_close($ch);
封装cURL函数
封装POST请求
封装GET请求
POST请求与GET请求相结合
使用cURL函数提交请求