php通过curl单独抓取网页可以,抓取多个会出错
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php通过curl单独抓取网页可以,抓取多个会出错,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6004字,纯文字阅读大概需要9分钟。
内容图文
使用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有值么,类型对么?
内容总结
以上是互联网集市为您收集整理的php通过curl单独抓取网页可以,抓取多个会出错全部内容,希望文章能够帮你解决php通过curl单独抓取网页可以,抓取多个会出错所遇到的程序开发问题。
如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。
来源:【匿名】
更多 ►
【php通过curl单独抓取网页可以,抓取多个会出错】教程文章相关的互联网学习教程文章
php运行出现Call to undefined function curl_init()的解决方法
简单说,调试报错了,Call to undefined function curl_init()。度了下,大家都说这样可以搞定(WAMP环境):1、在php.ini中找到extension=php_curl.dll,去掉前面的,php.ini一般在c:\windows下面。2、在php.ini中找到extension_dir = "ext",去掉前面的;,改为extension_dir = "C:\php5\ext"。"C:\php5\ext"只是示例,即扩展指向的路径要对3、php_curl.dll(???)、libeay32.dll、ssleay32.dll、php5ts.dll都拷到system32下面...
PHP curl_setopt函数用法介绍【代码】
[导读] curl_setopt函数是php中一个重要的函数,它可以模仿用户的一些行为,如模仿用户登录,注册等等一些用户可操作的行为哦。bool curl_setopt (int ch, string option, mixed value)curl_setopt()函数将为一个CURL会话设置选项。option参数是你想要的设置,value是这个选项给定的值伪造登录主站wap登录和discuz论坛wap登录,两边的用户数据资料在同一个表中进行调用 //参数数组$data = array(‘username’ => ‘username’,‘pa...
php使用cUrl方法 get、post请求【代码】
php使用curl方法,请确保已经开启curl扩展。传送门:http://www.cnblogs.com/wgq123/p/7450667.html/**Curl请求get方法 *@$url String 要请求的url地址 *@$dara Array 要传递的参数 *@$timeout int 超时时间 *@return json /function curlGetRequest($url=‘‘, $data=array(), $timeout=5){if($url == ‘‘ || $timeout <=0){returnfalse;}$param = ‘‘;if(!empty($data)){foreach($dataas$k=>$v){$param .= $k ...
Linux 编译安装 php 扩展包 curl
php源码目录:/root/phpphp编译目录:/usr/local/webserver/php/curl源码目录:/root/curl1.curl,主要用于发送http请求,是php的一个扩展包。2.安装过程:(1)curl下载:http://curl.haxx.se/download.html(2)具体安装过程:解压:tar -zxvf curl.tar.gzcd /(php源码目录,不是php编译目录)/ext/curl运行phpize: /(php编译目录)/bin/phpize./configure --with-php-config=/(php编译目录)/bin/php-config --with-curl=...
PHP CURL获取cookies模拟登录的方法【图】
要提取google搜索的部分数据,发现google对于软件抓取它的数据屏蔽的厉害,以前伪造下 USER-AGENT 就可以抓数据,但是现在却不行了。利用抓包数据发现,Google 判断了 cookies,当你没有cookies的时候,直接返回 302 跳转,而且是连续几十个302跳转,根本抓不了数据。因此,在发送搜索命令时,需要先提取 cookies 并保存,然后利用保存下来的这个cookies再次发送搜索命令即可正常抓数据了。这其实和论坛的模拟登录一个道理,先POST...
php中通过curl模拟登陆discuz论坛的实现代码
libcurl同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。 php的curl真的是相当好用,网上一搜索相关文章都是关于curl模拟登陆的,很少人提供模拟discuz发贴的源码。 复制代码 代码如下:<?php $discuz_url = ‘http://127.0.0.1/discuz/‘;//论坛地址 $login_url = $discuz_url .‘logging.php?action=login‘;//登录页地址 $post_fi...
PHP curl 简单使用【代码】
<?php//初始化变量$cookie_file = tempnam(‘./‘,‘cookie‘);$ip1 = mt_rand(1,127) . ‘.‘ . mt_rand(1,127) . ‘.‘ . mt_rand(1,127) . ‘.‘ . mt_rand(1,127);$header = array( ‘CLIENT-IP:‘ . $ip1, ‘X-FORWARDED-FOR:‘ . $ip1,);$login_url = ‘http://www.kangyq.com/do.php?ac=Christopher&&ref‘;$refer = ‘space.php?do=home‘;$loginsubmit = ‘登陆‘;$post_fields = ‘user...
curl学习笔记(以php为例)【代码】
一、demo,抓取百度页码代码: $url = ‘https://www.baidu.com/‘;$ch = curl_init($url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);curl_setopt($ch, CURLOPT_HEADER, FALSE);curl_setopt($ch, CURLOPT_TIMEOUT, 120);$html = curl_exec($ch);curl_close($ch);var_dump($html);二、curl函数介绍:1、curl_init($url):初始化curl回话,返回资源类型2、curl_setopt($c...
php curl【代码】
curl 模拟post提交 1$url = ‘http://localhost/url.php‘;2 3$arr = [4 ‘username‘ => ‘Tom‘,5 ‘age‘ => 20,6 ‘sex‘ => ‘男‘7];8$ch = curl_init();910 curl_setopt($ch, CURLOPT_URL, $url);
11 curl_setopt($ch, CURLOPT_HEADER, 0);
12 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
13 curl_setopt($ch, CURLOPT_POST, 1);
14 curl_setopt($ch, CURLOPT_POSTFIELDS, $arr);
1516$data = curl_exec($ch...
[转]考虑 PHP 5.0~5.6 各版本兼容性的 cURL 文件上传【代码】
FROM : https://segmentfault.com/a/1190000000725185最近做的一个需求,要通过PHP调用cURL,以multipart/form-data格式上传文件。踩坑若干,够一篇文章了。重要警告没事不要读PHP的官方中文文档!版本跟不上坑死你!不同版本PHP之间cURL的区别PHP的cURL支持通过给CURL_POSTFIELDS传递关联数组(而不是字符串)来生成multipart/form-data的POST请求。传统上,PHP的cURL支持通过在数组数据中,使用“@+文件全路径”的语法附加文件,...
PHP使用CURL设置header头传参以及设置Content-Type: application/json类型的后台数据接收
CURL函数 public function CurlRequest($url,$data=null,$header=null){ //初始化浏览器 $ch = curl_init(); //设置浏览器,把参数url传到浏览器的设置当中 curl_setopt($ch, CURLOPT_URL, $url); //以字符串形式返回到浏览器当中 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //禁止https协议验证域名,0就是禁止验证域名且兼容php5.6 ...
PHP实现curl和snoopy类模拟登陆方法【代码】
Snoopy.class.php下载方法/步骤 第一种:使用snoopy类实现模拟登陆1.在网上下载一个Snoopy.class.php的文件 2.代码实现:<?phpset_time_limit(0);require "Snoopy.class.php";$snoopy=new Snoopy();$snoopy->referer=‘你要模拟登陆的域名‘;//例如:http://www.baidu.com/$snoopy->agent="定义浏览器根";$post[‘username‘] =‘登陆账号‘;//根据你要模拟登陆的网站具体的传值 名称来定$post[‘password‘] =‘登陆密码‘;//根据...
php运行报Call to undefined function curl_init()的解决办法
很早之前就出现过这个问题,网上百度了下,答案千篇一律,都是说:1、在php.ini中开启curl扩展2、将php目录下的libeay32.dll、ssleay32.dll、php5ts.dll拷贝到c:\windows\system32里面(还有一种方法是说在httpd.conf中加上动态链接库,如:LoadFile d:/php/libeay32.dll 和 LoadFile d:/php/ssleay32.dll,但我试过了,同样不起作用)3、重启apache,OK!不知道这些人是不是真的试过而且成功了,就把这些所谓的解决方案往网上分享...
nginx+php下curl请求https报502错【代码】
在做公司项目的时候使用了第三方的API接口,且接口采用的是https请求,在本地的wamp集成环境开发测试正常,放到服务器上结果报错 nginx 502 bad gateway。在论坛中爬楼了几天今天终于找到原因,php版本问题;公司项目线上环境:服务器安装了wdcp其中nginx是1.4.2版本 php是5.2.17版本部署项目上去后,怎么运行都报502错,刚开始怀疑是nginx配置问题,百度了许久说请求https需要ssl于是配置了nginx的ssl后问题依旧,无奈只好继续搜索...
在PHP中使用CURL实现GET和POST请求的方法
1.CURL介绍CURL是一个利用URL语法规定来传输文件和数据的工具.支持很多协议,如HTTP、FTP、TELNET等。幸运的是PHP也支持CURL库。本文将介绍curl的一些高级特性,以及在PHP中如何运用它。2.基本结构在学习更为复杂的功能之前,先来看一下在PHP中建立CURL请求的基本步骤:(1)初始化 curl_init()(2)设置变量 curl_setopt() //最为重要,一切玄妙均在此。有一长串curl参数可供设置,它们能指定URL请求的各个细节。要一次性全部看完...
PHP - 技术教程分类
PHP 教程
PHP 简介
PHP 安装
PHP 语法
PHP 变量
PHP echo/print
PHP EOF(heredoc)
PHP 数据类型
PHP 类型比较
PHP 常量
PHP 字符串
PHP 运算符
PHP If...Else
PHP Switch
PHP 数组
PHP 数组排序
PHP 超级全局变量
PHP While 循环
PHP For 循环
PHP 函数
PHP 魔术常量
PHP 命名空间
PHP 面向对象
PHP 测验
PHP 表单
PHP 表单验证
PHP 表单 - 必需字段
PHP 完整表单实例
PHP $_GET 变量
PHP $_POST 变量
PHP 多维数组
PHP 日期
PHP 包含
PHP 文件
PHP 文件上传
PHP Cookie
PHP Session
PHP E-mail
PHP Error
PHP Exception
PHP 过滤器
PHP 7 新特性
PHP MySQL 简介
PHP MySQL 连接
PHP MySQL 创建数据库
PHP MySQL 创建数据表
PHP MySQL 插入数据
PHP MySQL 插入多条数据
PHP MySQL 预处理语句
PHP MySQL 读取数据
PHP MySQL Where
PHP MySQL Order By
PHP MySQL Update
PHP MySQL Delete
PHP ODBC
AJAX 简介
AJAX PHP
AJAX 数据库
AJAX 实时搜索
AJAX 投票
PHP Array
PHP Calendar
PHP cURL
PHP Date
PHP Directory
PHP Error
PHP Filesystem
PHP Filter
PHP FTP
PHP HTTP
PHP Mail
PHP Math
PHP Misc
PHP MySQLi
PHP PDO
PHP String
PHP Zip
PHP Timezones
PHP 图像处理
PHP RESTful
PHP PCRE
PHP 可用的函数
PHP Composer
php 全部
PHP - 最新教程