简单的PHP采集示例
<?php header('Content-type: text/html; charset=utf-8'); set_time_limit(900); $a=<<<EOD 复制html内容到这里 EOD; //获取需要的链接 preg_match_all('/\\/chapter\\/110701\\/\\d+\\.html/i', $a, $arr); //得到完整链接地址 $arr = explode(',', 'http://vip.book.sina.com.cn' . implode(',http://vip.book.sina.com.cn', $arr[0])); $b = '文章正文内容开始前面的html'; $c = '/正则匹配章节标题和章节内容之间的html,如果此部门内容没有时间等不同的字符,可以直接用str_replace而不是preg_replace'; $e = '文章正文内容结束后面的html'; $result = ''; //要获取的文章内容 $txt = fopen('e:/web/abc.txt', 'wb'); ob_start(); for ($i = 0; $i < count($arr); $i++) { $result = ''; $str = file_get_contents($arr[$i]); //也可以用curl $str = explode($b, $str); $str = explode($e, count($str) > 1 ? $str[1] : $str[0]); $str = explode('</h1>', $str[0], 2); $result = $str[0] . "\r\n"; $str = preg_replace($c, '', $str[1]); $str = str_replace('<p>', '', $str); $str = str_replace('</p>', "\r\n", $str); $result .= $str; fwrite($txt, $result); echo str_replace("\r\n", '<br />', $result); flush(); } fclose($txt);
file_get_contents()抓取 https 地址时出错:
SSL operation failed with code 1. OpenSSL Error message
原因是证书校验不通过,可以设置忽略证书校验:
$option=array( 'ssl'=>array('verify_peer' => false, 'verify_peer_name' => false) ); $stream=stream_context_create($option); file_get_contents($url, false, $stream);