(一)采集原理分析
数据采集是指获取指定网站的内容,之后将其存入数据库中,采集步骤如下:
第1步:获取指定网址的数据
http://www.qidian.com?id=1&articleid=6
获取数据可以使用如下函数:
(1)file_get_content()函数
(2)fopen()函数、fread()函数
(3)curl()函数
(4)snoopy类
第2步:提取所需内容,使用preg_match_all()函数获取匹配的数据
使用正则表达式获取需要采集的特定内容。
第3步:分类存储至数据库表中(入库)
第4步:从数据库中读取数据
第5步:展示读取出的数据
(二)正则表达式
使用正则表达式可以匹配、检索字符串。
/’;
KaTeX parse error: Expected 'EOF', got '#' at position 6: reg=’#̲^….#’;
1.量词
- 匹配任何至少包含一个前导字符串
- 匹配任何包含零个或多个前导字符串
- 匹配任何包含零个或一个前导字符串
- 匹配任意字符串
- {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})+
*可以匹配任意字符串(因为.匹配任意字符,*表示任意个)
2.元字符 - [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 匹配是否到达了单词边界 /abc\b/ helloabcgood
- \B 匹配是否没有达到单词边界
- \ 匹配正则中的特殊字符
3.修饰符
语法:修饰符放在“/”的后面 /\w/i - i 完成不区分大小写的搜索
- m 在匹配首内容或者尾内容时候采用多行识别匹配
- x 忽略正则中的空白
- A 强制从头开始匹配
- U 禁止贪婪匹配只跟踪到最近的一个匹配符并结束 /xo*/U xoooobc
4.正则相关函数 - 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实现图片下载
(八)cURL
1.Client URL库
2.开启curl扩展
3.使用cURL完成请求的四步
第1步:初始化资源 $ch = curl_init();
第2步: 设置相关的参数 curl_setopt()
第3步: 发送请求 curl_exec($ch)
第4部:关闭资源 curl_close($ch);
4.封装cURL函数
封装POST请求
封装GET请求
POST请求与GET请求相结合
5.使用cURL函数提交请求
希望在这里可以给大家提供一些帮助