下面是“php使用curl和正则表达式抓取网页数据示例”的完整攻略:
一、curl的基本用法
curl是一个非常常用的工具,它可以通过网络协议,向网络服务器发送请求,从而获取服务器返回的数据。在PHP中,可以使用curl库来发起网络请求,并获取服务器返回的数据。
1.1 基本的curl请求
下面是一个基本的curl请求的代码示例:
$url = 'https://www.baidu.com/';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
上面的代码示例中,我们先定义了要请求的网址$url,然后使用curl_init()函数创建了一个curl句柄$ch。接着,我们使用curl_setopt()函数来设置curl的相关选项,如URL和返回值等。最后,我们使用curl_exec()函数来执行curl请求,并使用curl_close()函数来关闭curl句柄。
1.2 可自定义请求头与解析Cookie的基本curl请求
下面是一个可自定义请求头与解析Cookie的基本curl请求代码示例:
$url="https://www.baidu.com/";
$header = array(
'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20100101 Firefox/11.0',
'Accept-Language: zh-cn,zh;q=0.5',
'Connection: keep-alive',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header); //自定义请求头
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); //保存cookie到文件
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); //从文件中读取cookie,实现自动登录
$response = curl_exec($ch);
curl_close($ch);
echo $response;
上面的代码示例中,我们创建了一个自定义请求头的curl请求,并使用了cookie来实现自动登录。
二、正则表达式的基本用法
正则表达式是一种用来匹配字符串的工具,经常用来从网页的代码中筛选出我们所需要的信息。在PHP中,可以使用preg系列函数来匹配正则表达式。
2.1 基本的正则表达式匹配
下面是一个基本的正则表达式匹配的代码示例:
$str = '<strong>PHP学习网站</strong>';
if (preg_match('/<strong>(.*?)<\/strong>/i', $str, $matches)) {
echo $matches[1];
}
上面的代码示例中,我们通过preg_match()函数,使用正则表达式匹配了$str字符串中的PHP学习网站, 并将匹配结果保存到$matches数组中。
2.2 正则表达式匹配多个结果
下面是一个正则表达式匹配多个结果的代码示例:
$str = '<a href="https://www.baidu.com">百度</a><a href="https://www.sina.com">新浪</a><a href="https://www.qq.com">腾讯</a>';
if (preg_match_all('/<a href="(.*?)">(.*?)<\/a>/i', $str, $matches)) {
print_r($matches[1]);
print_r($matches[2]);
}
上面的代码示例中,我们通过preg_match_all()函数,使用正则表达式匹配了$str字符串中的所有超链接,并将匹配结果保存到$matches数组中。
三、使用curl和正则表达式抓取网页数据
综合使用curl和正则表达式的方法,可以通过PHP代码来快捷地抓取网页数据。
下面是一个实战用例,我们将通过PHP代码抓取百度搜索结果页面中的所有标题和URL:
$url = 'https://www.baidu.com/s?wd=php';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
curl_close($ch);
if (preg_match_all('/<h3 class="t"><a href="(.*?)" target="_blank">(.*?)<\/a><\/h3>/i', $response, $matches)) {
foreach ($matches[1] as $key => $value) {
echo $matches[2][$key] . "\t" . $value . "\n";
}
}
上面的代码示例中,我们先使用curl库来获取百度搜索结果页面的HTML代码,然后使用正则表达式来匹配标题和URL,并将结果输出到屏幕上。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php使用curl和正则表达式抓取网页数据示例 - Python技术站