使用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('/(?<=href=\").*?(?=\")/', $result, $arrayTemp);
$linkList = $arrayTemp[0];
preg_match_all('/(?<=title=\").*?(?=\")/', $result, $arrayTemp);
$titleList = $arrayTemp[0];
preg_match_all('/(?<=\[)\d*\-\d*(?=\])/', $result, $arrayTemp);
$dateList_temp = $arrayTemp[0];
$dateList = array();
$linkList = str_replace('Detail.aspx', 'http://jobs.hubu.edu.cn/Detail.aspx', $linkList);
foreach ($dateList_temp as $key => $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('/(?<=href=\").*?(?=\")/', $result, $arrayTemp);
$linkList = $arrayTemp[0];
preg_match_all('/(?<=title=\").*?(?=\")/', $result, $arrayTemp);
$titleList = $arrayTemp[0];
preg_match_all('/(?<=\[)\d*\-\d*(?=\])/', $result, $arrayTemp);
$dateList_temp = $arrayTemp[0];
$dateList = array();
$linkList = str_replace('Detail.aspx', 'http://jobs.hubu.edu.cn/Detail.aspx', $linkList);
foreach ($dateList_temp as $key => $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('/.+?<\/a>\s+\[(\d+\-\d+)\]/', $html, $links);
array_shift($links);//删除掉第一个
$size = count($links[0]);
for($i=0; $i<$size; $i++){//有匹配到结果
$title = $links[0][$i];
$url = htmlspecialchars_decode($links[1][$i]);//还原URL中的 HTML 实体符为原始的字符
$date = date('Y') . '-' . $links[2][$i];
echo $date, "\t", $title, "\t", $url, "\n";
//makePage($url);
}
function makePage($url){
global $http;//使用全局变量中的那个 HttpClient 实例
$html = $http->Get(ROOT_URL . $url);//拼接完整的URL
//$html 就是页面的内容
}
因为无聊帮你更新一下代码, 上面为我自己根据你之前的代码编写而成, 下图为运行结果(makePage
里面加你自己的代码):
makePage($link)
$link有值么,类型对么?
写下你的评论吧 !
推荐阅读
-
本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ...
[详细]
蜡笔小新 2023-12-14 18:18:21
-
今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ...
[详细]
蜡笔小新 2023-12-14 17:58:15
-
-
本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ...
[详细]
蜡笔小新 2023-12-14 17:06:58
-
本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ...
[详细]
蜡笔小新 2023-12-14 15:43:50
-
本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ...
[详细]
蜡笔小新 2023-12-14 15:08:18
-
本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ...
[详细]
蜡笔小新 2023-12-14 14:25:33
-
本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ...
[详细]
蜡笔小新 2023-12-14 13:11:00
-
本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ...
[详细]
蜡笔小新 2023-12-14 12:37:25
-
本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ...
[详细]
蜡笔小新 2023-12-14 12:09:13
-
本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ...
[详细]
蜡笔小新 2023-12-14 17:15:19
-
本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ...
[详细]
蜡笔小新 2023-12-14 17:03:58
-
本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ...
[详细]
蜡笔小新 2023-12-14 16:17:05
-
本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ...
[详细]
蜡笔小新 2023-12-14 15:56:00
-
本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ...
[详细]
蜡笔小新 2023-12-14 15:22:09
-
本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ...
[详细]
蜡笔小新 2023-12-14 12:14:09
-
我户口名字被占用了_402
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
-
1数学的终极价值是什么?数学的终极目标是什么?
-
2Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=999, r
-
3c语言工程师认证,c语言工程师认证考试
-
4SQL2005Express怎么导入ACCESS数据库?
-
5JVM内存结构介绍
-
6菜鸟系列计算机网络——概述
-
7win11频繁闪屏刷新桌面如何解决
-
8计算导论与c语言基础pdf下载,Learner Reviews Feedback for 计算导论与C语言基础 Course | Coursera...
-
9为什么node.js 幂运算不支持负数?
-
10多级式多传感器信息融合中的状态估计(Matlab代码实现)
-
11Cisco的OSPF路由过滤总结
-
12CrossOver的容器目录该如何更改
-
13公园虚拟管理系统的设计原理
-
14linux java shell jar_linux下shell脚本执行jar文件
-
15iphone11怎么分屏 苹果iphone11分屏操作方法
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有