CURL 采集

1 篇文章 0 订阅

........行符以外的任意字符

\w  匹配字母或数字或下划线【应该是word的首字母】

\s  匹配任意的空白符    【space首字母】

\d  匹配数字          【英文Digital的首位字母】

\b  匹配单词的开始或结束 【begin首字母】

^   匹配字符串的开始

$   匹配字符串的结束

*   重复零次或更多次

+   重复一次或更多次

?   重复零次或一次

{n} 重复n次

{n,}    重复n次或更多次

{n,m}   重复n到m次

//反义

\W  匹配任意不是字母,数字,下划线

\S  匹配任意不是空白符的字符

\D  匹配任意非数字的字符

\B  匹配不是单词开头或结束的位置

[^x]    匹配除了x以外的任意字符

[^aeiou]    匹配除了aeiou这几个字母以外的任意字符

PHP正则表达式模式后面通常带有 /i, /is, /s, /isU等参数说明

i  匹配大小写

s 模式中的圆点元字符(.)匹配所有的字符,包括换行符

x 模式中的空白字符除了被转义的或在字符类中的以外完全被忽略,在未转义的字符类之外的 # 以及下一个换行符之间的所有字符,包括两 头,也都被忽略

A (PCRE_ANCHORED) 如果设定了此修正符,模式被强制为“anchored”,即强制仅从目标字符串的开头开始匹配即自动在模式开头加上^。

D (PCRE_DOLLAR_ENDONLY) 如果设定了此修正符,模式中的美元元字符仅匹配目标字符串的结尾。没有此选项时,如果最后一个字符是换行符的话,美元符号也会匹配此字符之前(但不会匹配 任何其它换行符之前)。如果设定了 m 修正符则忽略此选项。Perl 中没有与其等价的修正符。  S 当一个模式将被使用若干次时,为加速匹配起见值得先对其进行分析。如果设定了此修正符则会进行额外的分析。目前,分析一个模式仅对没有单一固定起始字符的 non-anchored 模式有用。 

U (PCRE_UNGREEDY) 本修正符反转了匹配数量的值使其不是默认的重复,而变成在后面跟上“?”才变得重复。这和 Perl 不兼容。也可以通过在模式之中设定 (?U) 修正符来启用此选项。

X (PCRE_EXTRA) 此 修正符启用了一个 PCRE 中与 Perl 不兼容的额外功能。模式中的任何反斜线后面跟上一个没有特殊意义的字母导致一个错误,从而保留此组合以备将 来扩充。默认情况下,和 Perl 一样,一个反斜线后面跟一个没有特殊意义的字母被当成该字母本身。当前没有其它特性受此修正符控制。即:贪婪模式,最 大限度匹配 如:/a[/w]+?e/U匹配abceadeddd中的abceade而不是abce,如果不加U修正,则匹配abce  u (PCRE_UTF8) 此修正符启用了一个 PCRE 中与 Perl 不兼容的额外功能。模式字符串被当成 UTF-8。本修正符在 Unix 下自 PHP 4.1.0 起可用,在 win32 下自 PHP 4.2.3 起可用。

php的正则相关的函数

PCRE 函数

函数

描述

preg_filter

执行一个正则表达式搜索和替换

preg_grep

返回匹配模式的数组条目

preg_last_error

返回最后一个PCRE正则执行产生的错误代码

preg_match_all【正则表达式匹配多次】

执行一个全局正则表达式匹配

preg_match【正则表达式匹配一次】

执行一个正则表达式匹配

preg_quote

转义正则表达式字符

preg_replace_callback_array

执行一个正则表达式搜索并且使用一个回调进行替换

preg_replace_callback

执行一个正则表达式搜索并且使用一个回调进行替换

preg_replace

执行一个正则表达式的搜索和替换

preg_split

通过一个正则表达式分隔字符串

重点函数的语法:

int preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] )

搜索 subject 中所有匹配 pattern 给定正则表达式的匹配结果并且将它们以 flag 指定顺序输出到 matches 中。

在第一个匹配找到后, 子序列继续从最后一次匹配位置搜索。

参数说明:

  • $pattern: 要搜索的模式,字符串形式。
  • $subject: 输入字符串。
  • $matches: 多维数组,作为输出参数输出所有匹配结果, 数组排序通过flags指定。
  • $flags:可以结合下面标记使用(注意不能同时使用PREG_PATTERN_ORDER和 PREG_SET_ORDER):
    1. PREG_PATTERN_ORDER: 结果排序为$matches[0]保存完整模式的所有匹配, $matches[1] 保存第一个子组的所有匹配,以此类推。
    2. PREG_SET_ORDER: 结果排序为$matches[0]包含第一次匹配得到的所有匹配(包含子组), $matches[1]是包含第二次匹配到的所有匹配(包含子组)的数组,以此类推。
    3. PREG_OFFSET_CAPTURE: 如果这个标记被传递,每个发现的匹配返回时会增加它相对目标字符串的偏移量。
  • offset: 通常, 查找时从目标字符串的开始位置开始。可选参数offset用于 从目标字符串中指定位置开始搜索(单位是字节)。

preg_match 函数用于执行一个正则表达式匹配。

int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )

  • $pattern: 要搜索的模式,字符串形式。
  • $subject: 输入字符串。
  • $matches: 如果提供了参数matches,它将被填充为搜索结果。 $matches[0]将包含完整模式匹配到的文本, $matches[1] 将包含第一个捕获子组匹配到的文本,以此类推。
  • $flags:flags 可以被设置为以下标记值:
    1. PREG_OFFSET_CAPTURE: 如果传递了这个标记,对于每一个出现的匹配返回时会附加字符串偏移量(相对于目标字符串的)。 注意:这会改变填充到matches参数的数组,使其每个元素成为一个由 第0个元素是匹配到的字符串,第1个元素是该匹配字符串 在目标字符串subject中的偏移量。
  • offset: 通常,搜索从目标字符串的开始位置开始。可选参数 offset 用于 指定从目标字符串的某个未知开始搜索(单位是字节)。

两个函数的区别:

preg_match 匹配到一次就会停止,设置匹配到的一个匹配

preg_match_all 会一直匹配下去。直到字符串结束,设置匹配到的所有匹配【推荐】

curl [Client URL Library Functions]

PHP 支持 Daniel Stenberg 创建的 libcurl 库,能够连接通讯各种服务器、使用各种协议。libcurl 目前支持的协议有 http、https、ftp、gopher、telnet、dict、file、ldap。 libcurl 同时支持 HTTPS 证书、HTTP POST、HTTP PUT、 FTP 上传(也能通过 PHP 的 FTP 扩展完成)、HTTP 基于表单的上传、代理、cookies、用户名+密码的认证。

curl是客户端向服务器端请求的一个工具

 cURL是一个强大的库,能够连接通讯各种服务器、使用各种协议。同时支持 HTTPS 证书、HTTP POST、HTTP PUT、 FTP 上传(也能通过 PHP 的 FTP 扩展完成)、HTTP 基于表单的上传、代理、cookies、用户名+密码的认证。

对于网页资源

--编写爬虫

websevice数据接口资源

--可以动态获取接口上的数据,比如天气预报、号码归属地、短信

ftp服务器 里面的文件资源

--下载ftp服务器里面的文件

其他的资源

--所有网络的资源都可以用curl访问和下载。

curl( curl is a command ling tool for transferrng data whih URL ) 采集url传输数据的命令工具

常用函数

采集

/* 百度数据的采集*/ $curl=curl_init('http://www.baidu.com/');//初始化一个curl 参数可以直接写采集的地址 //在这里采集注意是 http还是https的协议 curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);//设置采集不直接输出 $data=curl_exec($curl);//执行采集 print_r($data);

天气预报查询

前台html页面

<script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"> </script> 城市 <input type="text" name="weaid" class="weaid"><input type="button" class="btn "value="查询"> <table> <tr> <td>温度</td> <td class="temperature"></td> </tr> <tr> <td>天气</td> <td class="weather_curr"></td> </tr> <tr> <td>图标</td> <td class="weather_icon"><img ></td> </tr> </table> <script> $('.btn').click(function(){ var weaid = $('.weaid').val();//获取用户输入的城市的信息 $.get('weather.php',{weaid:weaid},function (data) { console.log(data); temperature =data.result.temperature; $('.temperature').text(temperature); weather_curr =data.result.weather_curr; $('.weather_curr').text(weather_curr); weather_icon =data.result.weather_icon; $('.weather_icon img').attr('src',weather_icon); },'json') }) </script>

后台php页面,接收数据,返回给前台页面

$ch=curl_init();//初始化curl $weaid=$_GET['weaid']; $appkey='42767'; $sign='f2c0982883594a157d5a7909345b74e1'; $url="http://api.k780.com/?app=weather.today&weaid=$weaid&appkey=$appkey&sign=$sign&format=json";//采集的地址 curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);//将采集的数据不直接输出 curl_setopt($ch,CURLOPT_URL,$url);//设置采集的地址 $data = curl_exec($ch); echo $data; /*$res = json_decode($data,true);//将json格式的数据转化为数组 参数true 转换为数组 默认是false转化为对象 print_r($res);*/

百度翻译接口

<?php $q="banana"; $from="en"; $to="zh"; $appid="20190529000302898"; $salt=rand(1000000000,9999999999); $sign1="OlcAZuodFb2vaOmXYPBS"; $sign=md5($appid.$q.$salt.$sign1); $url="http://api.fanyi.baidu.com/api/trans/vip/translate?q=$q&from=$from&to=$to&appid=$appid&salt=$salt&sign=$sign"; echo $url; $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); $data=curl_exec($ch); echo $data;

curl采集入库

源码采集

$ch = curl_init();//初始化curl $url="https://www.huodongxing.com/search?ps=12&pi=0&list=list&qs=it&st=1,4&city=%E4%B8%8A%E6%B5%B7"; curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);//不直接输出 curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);//关闭ssl认证 curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);//关闭ssl认证 curl_setopt($ch,CURLOPT_URL,$url);//设置采集的地址 $data = curl_exec($ch); $reg='#<div class="search-tab-content-item flex">.*<img class="item-logo" src="(.*)" alt=".*" title=".*">.*<a class="item-title" href="(.*)" target="_blank" title=".*">(.*)</a>.*<p class="item-data flex"><span class="item-data-icon icon"></span>(.*)</p>.*<p class="user-name" style="max-width:120px;" title=".*">(.*)</p>.*</div>.*</div>#isU'; preg_match_all($reg,$data,$reslut);//正则表达是匹配 参数 1正则 参数2 数据 参数 3 匹配的内容 $src=$reslut[1]; $title=$reslut[3]; $href=$reslut[2]; $time=$reslut[4]; $author=$reslut[5]; $sql="insert into news3(title,href,`time`,author,img) values"; foreach($src as $k=>$value){ $href="https://www.huodongxing.com".$href[$k]; $sql.="('$title[$k]','$href','$time[$k]','$author[$k]','$value'),"; } $sql = substr($sql,0,-1); $dbh = new PDO('mysql:host=127.0.0.1;dbname=1901a', 'root', 'root'); $dbh->setAttribute(PDO::ATTR_ERRMODE,true); $res = $dbh->exec($sql); if($res){ echo "OK"; }else{ echo "no"; }

在框架中采集

public function getInfo() { $url="https://www.cnblogs.com/jiangshiguo/";//采集的网址 $ch = curl_init();//初始化curl curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);//将结果不直接输出 curl_setopt($ch,CURLOPT_URL,$url); //因为采集的网址是https的ssl证书认证 关闭 curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); $data =curl_exec($ch); /* print_r($data);*/ $reg='#<div class="day">.*<div class="dayTitle">.*<a href="(.*)">(.*)</a>.*</div>.*<div class="postTitle">.*<a class="postTitle2 vertical-middle" href=".*">.*<span>(.*)</span>.*</a>.*</div>.*<div class="postCon">.*<div class="c_b_p_desc">(.*)<a href=".*" class="c_b_p_desc_readmore">阅读全文</a>.*</div>.*<div class="postDesc">(.*)<span data-post-id=".*" class="post-view-count">.*</span>#isU'; preg_match_all($reg,$data,$result); //print_r($result); $href=$result[1]; $time=$result[2]; $title=$result[3]; $desction=$result[4]; $author=$result[5]; $arr=[]; foreach($href as $k=>$v){ $arr[$k]['href']=$v; $arr[$k]['time']=$time[$k]; $arr[$k]['title']=trim($title[$k]); $arr[$k]['desction']=trim($desction[$k]); $arr[$k]['author']=trim(substr($author[$k],26)); } print_r($arr); DB::table('news3')->insert($arr); }

Querylist采集数据

laravel框架配置querylist

将querylist框架放入vendor目录下

在入口文件引入自动加载文件

入口文件添加引入【注意仔细检查autoload.php文件的位置】

require __DIR__.'/../vendor/QueryList/vendor/autoload.php';

控制器层代码

public function getNews(){ $data=QueryList::get('https://www.huodongxing.com/search?ps=12&pi=3&list=list&qs=it&st=1,4') ->rules([ 'images'=>['.search-tab-content-item .item-logo','src'], 'title'=>['.search-tab-content-item .item-title','text'], 'href'=>['.search-tab-content-item .item-title','href'], 'times'=>['.search-tab-content-item .item-data','text'], 'address'=>['.search-tab-content-item .item-dress','text'], 'author'=>['.search-tab-content-item .user-name','text'], ]) ->queryData(); $res=Fours::add($data); if($res){ echo "添加成功"; }else{ echo "添加失败"; } }

模型层

protected $table="news"; public $timestamps=false;//关闭时间戳 public static function add($data){ return self::insert($data); }

单条采集

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值