$linklist中,分别是http://jobs.hubu.edu.cn/detail.aspx?articlechannelid=81&articleid=5722, http://jobs.hubu.edu.cn/detail.aspx?articlechannelid=81&articleid=5325等等。
function getjobshubunotice(){ $curl = curl_init('http://jobs.hubu.edu.cn/list.aspx?articlechannelid=81'); curl_setopt($curl, curlopt_returntransfer, 1); $result = curl_exec($curl); //内容处理 $result = strip_tags($result,''); $result = stristr($result, 'nbsp当前位置:'); $result = str_replace('nbsp当前位置:', '', $result); $result = stristr($result, '当前1/2页',true); $result = stristr($result, '通知公告'); $result = str_replace('通知公告', '', $result); preg_match_all('/(? $value) { $datelist[$key] = date('y').'-'.$value; } $jobshubu = array(); //分别获得网页上的每条通知的标题,链接,时间 $jobshubu[0] = $datelist; $jobshubu[1] = $titlelist; $jobshubu[2] = $linklist; return $jobshubu;}//function makepage($link){ ....... //省略部分代码 else if(starts($link,'jobs.hubu')) { echo 进入makepage函数; echo 处理网页.$link.'
'; $curl = curl_init(); curl_setopt($curl, curlopt_url , $link); curl_setopt($curl, curlopt_returntransfer, 1); $result = curl_exec($curl); //echo $result; //echo result结束; $result = strip_tags($result); $result = stristr($result, ' > 通知公告'); $result = str_replace(' > 通知公告', '', $result); $result = stristr($result, '$(document).ready',true); $result = trim($result); $result = str_replace(\r\n, '
', $result); $result = preg_replace('/(\
){1,}/', '
', $result); echo $result; echo '
'; echo 退出makepage函数; return $result; }}
先用getjobshubunotice()函数获取新闻的链接,标题,日期,然后用makepage()函数获取内容
这是在makepage内部打印链接的结果,链接用浏览器打开没有问题.
回复内容: 使用curl单独抓取http://jobs.hubu.edu.cn/detail.aspx?articlechannelid=81&articleid=5722可行,但是如果抓取相同类型的一系列网站就会出错,将他们放在数组
$linklist中,分别是http://jobs.hubu.edu.cn/detail.aspx?articlechannelid=81&articleid=5722, http://jobs.hubu.edu.cn/detail.aspx?articlechannelid=81&articleid=5325等等。
function getjobshubunotice(){ $curl = curl_init('http://jobs.hubu.edu.cn/list.aspx?articlechannelid=81'); curl_setopt($curl, curlopt_returntransfer, 1); $result = curl_exec($curl); //内容处理 $result = strip_tags($result,''); $result = stristr($result, 'nbsp当前位置:'); $result = str_replace('nbsp当前位置:', '', $result); $result = stristr($result, '当前1/2页',true); $result = stristr($result, '通知公告'); $result = str_replace('通知公告', '', $result); preg_match_all('/(? $value) { $datelist[$key] = date('y').'-'.$value; } $jobshubu = array(); //分别获得网页上的每条通知的标题,链接,时间 $jobshubu[0] = $datelist; $jobshubu[1] = $titlelist; $jobshubu[2] = $linklist; return $jobshubu;}//function makepage($link){ ....... //省略部分代码 else if(starts($link,'jobs.hubu')) { echo 进入makepage函数; echo 处理网页.$link.'
'; $curl = curl_init(); curl_setopt($curl, curlopt_url , $link); curl_setopt($curl, curlopt_returntransfer, 1); $result = curl_exec($curl); //echo $result; //echo result结束; $result = strip_tags($result); $result = stristr($result, ' > 通知公告'); $result = str_replace(' > 通知公告', '', $result); $result = stristr($result, '$(document).ready',true); $result = trim($result); $result = str_replace(\r\n, '
', $result); $result = preg_replace('/(\
){1,}/', '
', $result); echo $result; echo '
'; echo 退出makepage函数; return $result; }}
先用getjobshubunotice()函数获取新闻的链接,标题,日期,然后用makepage()函数获取内容
这是在makepage内部打印链接的结果,链接用浏览器打开没有问题.
你的代码呢?你的php代码并没有出错, 初步怀疑是你请求时传递的 url 不正确, 见下图:
你代码中输出的那个错误, 其实是你获取到的网页上输出的内容.
再次更新,我想我知道你请求出错的原因是什么了:
你从网页中获取到的url地址为: detail.aspx?articlechannelid=81&articleid=2777,
其中中 & 这个字符为 & 的html实体符, 在你输出的时候(即你的截图中)它显示的是&, 而当你去真正请求的时候, 是使用的 下面这样的东东:
你只需要把它进行还原或者简单的, 把url中的 & 替换为 & 然后再去请求就ok了.
再次更新:
ch = curl_init(); curl_setopt($this->ch, curlopt_useragent, 'mozilla/4.0 (compatible; msie 7.0; windows nt 6.1; trident/4.0; qqdownload 685; slcc2; .net clr 2.0.50727; .net clr 3.5.30729; .net clr 3.0.30729; .net4.0c; .net4.0e)');//ua curl_setopt($this->ch, curlopt_timeout, 40); curl_setopt($this->ch, curlopt_followlocation, true); curl_setopt($this->ch, curlopt_autoreferer, true); curl_setopt($this->ch, curlopt_returntransfer, true); curl_setopt($this->ch, curlopt_encoding, 'utf-8'); curl_setopt($this->ch, curlopt_cookiejar, $cookie_jar); curl_setopt($this->ch, curlopt_cookiefile, $cookie_jar); } function __destruct(){ curl_close($this->ch); } final public function setreferer($ref=''){ if($ref != ''){ curl_setopt($this->ch, curlopt_referer, $ref); } } final public function get($url, $header=false, $nobody=false){ curl_setopt($this->ch, curlopt_post, false); curl_setopt($this->ch, curlopt_url, $url); curl_setopt($this->ch, curlopt_header, $header); curl_setopt($this->ch, curlopt_nobody, $nobody); return curl_exec($this->ch); } final public function post($url, $data=array(), $header=false, $nobody=false){ curl_setopt($this->ch, curlopt_url, $url); curl_setopt($this->ch, curlopt_header, $header); curl_setopt($this->ch, curlopt_nobody, $nobody); curl_setopt($this->ch, curlopt_post, true); curl_setopt($this->ch, curlopt_postfields, http_build_query($data)); return curl_exec($this->ch); }}const root_url = 'http://jobs.hubu.edu.cn/';$home = 'http://jobs.hubu.edu.cn/list.aspx?articlechannelid=81';$http = new httpclient('cookie.txt');//获取列表页$html = $http->get($home);//用正则匹配出来 当前页 所有的 文章preg_match_all('/.+?\s+\[(\d+\-\d+)\]/', $html, $links);array_shift($links);//删除掉第一个$size = count($links[0]);for($i=0; $iget(root_url . $url);//拼接完整的url //$html 就是页面的内容}因为无聊帮你更新一下代码, 上面为我自己根据你之前的代码编写而成, 下图为运行结果(makepage里面加你自己的代码):
makepage($link)
$link有值么,类型对么?
