当前位置:首页 » 编程语言 » php网站抓取

php网站抓取

发布时间: 2024-06-11 12:09:45

php 用CURL 抓取错误提示:Recv failure: Connection was aborted 怎么解决 求助各位大神

一、原因分析

web站点目前主要分为http和https两种协议,其中https类型的网站都是通过ssl协议+http协议的,是目前最安全的网站协议,访问此类网站的时候,会走ssl协议,验证访问者的证书,检测是否安全。

通过curl访问此类网站也是如此流程,但是curl中需要添加相应的参数,绕过ssl证书的验证,才可以正常访问,如出现此错误的一般原因是没有加此参数。

CURLOPT_SSL_VERIFYHOST的值

设为0表示不检查证书

设为1表示检查证书中是否有CN(common name)字段

设为2表示在1的基础上校验当前的域名是否与CN匹配。

二、解决方案

如果出现:

PHP Notice: curl_setopt():

CURLOPT_SSL_VERIFYHOST with value 1 is deprecated and will be removed as of libcurl 7.28.1. It is recommended to use value 2 instead in

一般原因是你设置了 curl_setopt ( $curl_handle, CURLOPT_SSL_VERIFYHOST, true );

改成curl_setopt ( $curl_handle, CURLOPT_SSL_VERIFYHOST, 2 );就行了。

(1)php网站抓取扩展阅读

PHP其他原因错误:

1、错误现象

在用curl进行模拟调用时,curl接收内容会出现"Empty reply from server" 和 "Recv failure: Connection was reset"的错误。

2、解决方案

经过对apache的error_log进行跟踪,出现错误"Connection reset by peer: core_output_filter: writing data to the network"

修改httpd.conf,在虚拟主机上添加如下内容:

EnableSendfile off

EnableMMAP off

修改后"Empty reply from server"错误消失。

Ⅱ PHP怎样抓取网页代码中动态显示的数据

你是想抓别人网页上ajax动态载入的数据吧?

1、要找到它的ajax载入的URL地址

2、利用PHP的file_get_contents($url)函数读取那个url地址。

3、对抓取到的内容进行分析或正则过滤。

Ⅲ php获取网页源码内容有哪些办法

可以参考以下几种方法:

方法一: file_get_contents获取

<span style="white-space:pre"></span>$url="http://www..com/";

<span style="white-space:pre"></span>$fh= file_get_contents

('http://www.hxfzzx.com/news/fzfj/');<span style="white-space:pre"></span>echo $fh;

拓展资料

PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。

用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。

Ⅳ 使用PHP的cURL库进行网页抓取

使用模明仿PHP的cURL库可以简单和有效地去抓网页 你只需要运行一个脚本 然后分析一下你所抓取的网页 然后就可以以程序的方式得到你想要的数据了 无论是你想从从一个链接上取部分数据 或是取一个XML文件并把其导入数据库 那怕就是简单的获取网页内容 cURL 是一个功能强大的PHP库 本文主要讲述如果使用这个PHP库

启用 cURL 设置

首先 我们得先要确定我们的PHP是否开启了这个库 你可以通过使用php_info()函数来得到这一信息

﹤?phpphpinfo();?﹥

如果你可以在网页上看到下面的输出 那么表示cURL库已被开启

如果你看到的话 那么你需要设置你的PHP并开启这个库 如果你是在Windows平台下 那么非常简单 你需要改一改你的php ini文件的设置 找到php_curl dll 并取消前面的分号注释就行了 如下所示

//取消下在的注释extension=php_curl dll

如果你旦纤是在Linux下面 那么 你需要重新编译你的PHP了 编辑时 你需要打开编译参数——在configure命令上加上 –with curl 参数

一个小示例

如果一切就绪 下面是一个小例程

﹤?php// 初始化一个 cURL 对象$curl = curl_init();

// 设置你需要抓取的URLcurl_setopt($curl CURLOPT_URL //cocre );

// 设置headercurl_setopt($curl CURLOPT_HEADER );

// 设置cURL 参数 要求结果保存到字符串中还是输出到屏幕上槐链 curl_setopt($curl CURLOPT_RETURNTRANSFER );

// 运行cURL 请求网页$data = curl_exec($curl);

// 关闭URL请求curl_close($curl);

// 显示获得的数据var_mp($data);

如何POST数据

上面是抓取网页的代码 下面则是向某个网页POST数据 假设我们有一个处理表单的网址// example /sendSMS php 其可以接受两个表单域 一个是电话号码 一个是短信内容

﹤?php$phoneNumber = ;$message = This message was generated by curl and php ;$curlPost = pNUMBER= urlencode($phoneNumber) &MESSAGE= urlencode($message) &SUBMIT=Send ;$ch = curl_init();curl_setopt($ch CURLOPT_URL // example /sendSMS php );curl_setopt($ch CURLOPT_HEADER );curl_setopt($ch CURLOPT_RETURNTRANSFER );curl_setopt($ch CURLOPT_POST );curl_setopt($ch CURLOPT_POSTFIELDS $curlPost);$data = curl_exec();curl_close($ch);?﹥

从上面的程序我们可以看到 使用CURLOPT_POST设置HTTP协议的POST方法 而不是GET方法 然后以CURLOPT_POSTFIELDS设置POST的数据

关于代理服务器

下面是一个如何使用代理服务器的示例 请注意其中高亮的代码 代码很简单 我就不用多说了

﹤?php $ch = curl_init();curl_setopt($ch CURLOPT_URL // example );curl_setopt($ch CURLOPT_HEADER );curl_setopt($ch CURLOPT_RETURNTRANSFER );curl_setopt($ch CURLOPT_HTTPPROXYTUNNEL );curl_setopt($ch CURLOPT_PROXY fakeproxy : );curl_setopt($ch CURLOPT_PROXYUSERPWD user:password );$data = curl_exec();curl_close($ch);?﹥ 关于SSL和Cookie

关于SSL也就是HTTPS协议 你只需要把CURLOPT_URL连接中的//变成//就可以了 当然 还有一个参数叫CURLOPT_SSL_VERIFYHOST可以设置为验证站点

关于Cookie 你需要了解下面三个参数

CURLOPT_COOKIE 在当面的会话中设置一个cookie

CURLOPT_COOKIEJAR 当会话结束的时候保存一个Cookie

CURLOPT_COOKIEFILE Cookie的文件

HTTP服务器认证

最后 我们来看一看HTTP服务器认证的情况

﹤?php $ch = curl_init();curl_setopt($ch CURLOPT_URL // example );curl_setopt($ch CURLOPT_RETURNTRANSFER );curl_setopt($ch CURLOPT_HTTPAUTH CURLAUTH_BASIC);curl_setopt(CURLOPT_USERPWD [username]:[password] )

$data = curl_exec();curl_close($ch);?﹥

关于其它更多的内容 请参看相关的cURL手册 lishixin/Article/program/PHP/201311/21491

Ⅳ PHP抓取网页指定内容

<?php
/*
* 如下: 方法有点笨
* 抓取网页内容用 PHP 的正则
* 用JS每隔5分钟刷新当前页面---即重新获取网页内容
*
* 注: $mode中--<title></title>-更改为所需内容(如 $mode = "#<a(.*)</a>#";>获取所有链接)
*
* window.location.href="http://localhost//refesh.php";中的http://localhost//refesh.php
* 更改为自己的URL----作用:即刷新当前页面
*
* setInterval("ref()",300000);是每隔300000毫秒(即 5 * 60 *1000 毫秒即5分钟)执行一次函数 ref()
*
* print_r($arr);输出获得的所有内容 $arr是一个数组 可根据所需输出一部分(如 echo $arr[1][0];)
* 若要获得所有内容 可去掉
* $mode = "#<title>(.*)</title>#";
if(preg_match_all($mode,$content,$arr)){
print_r($arr);
echo "<br/>";
echo $arr[1][0];
}
再加上 echo $content;
*/
$url = "http://www..com"; //目标站
$fp = @fopen($url, "r") or die("超时");

$content=file_get_contents($url);
$mode = "#<title>(.*)</title>#";
if(preg_match_all($mode,$content,$arr)){
//print_r($arr);
echo "<br/>";
echo $arr[1][0];
}
?>
<script language="JavaScript" type="text/javascript">
<--
function ref(){
window.location.href="http://localhost//refesh.php";
}
setInterval("ref()",300000);
//-->
</script>

Ⅵ 如何用PHP抓取此链接的动态视频地址

看你是什么视频,
如果是一些视频网站像优酷薯仔之类的,把鼠标放到正在播放的视频上,就会在右边滑出分享菜单,根据你的需求复制相应格式的视频地址代码就行。
如果是一些小网站上自己上传在主机空间的小视频,你可以用IE打开,在确定你的电脑中装了迅雷的情况下,把鼠标放到视频上,就会有迅雷的下载提示,点击下载,然后在确认对话框中,你会看到一个视频的地址,复制它就可以。
另外一个办法就是在页面空白的地址点击右键,查看页面源代码,然后在代码中找到<embed>这一对标签,然后这对标签里的src="",在src后面的一对引号是的地址就是视频地址,你可以复制到浏览器来打开试试。

Ⅶ php,在本地使用file_get_contents和cur抓取网页l特别慢是什么原因

有三个原因:

第一个主因是网速,虽然你使用的是电信6M宽带,但网速还是无法与虚拟服务器相比,虚拟服务器所限制的网速一般只是上传速度,下载的速度并不限制,没有谁使用虚拟服务器去大量下载数据。

另外,虚拟主机再怎么差,连接到机房的到底是光纤而不是宽带,这一点毋庸置疑。

另一个原因是DNS,一个服务器提供商,都会在机房里设置自己的DNS服务器,这样会大大提高服务器的解析速度,同时还对外提供各种DNS解析服务,所以,虚拟主机的DNS速度,不是个人宽带可以比拟的,而个人电脑却需要使用宽带资源解析DNS。

第三个原因就是路由,个人宽带不是主干网,一般的空间商所接入的光纤却尽量与国家光纤主干距离很近,路由延迟极短,个个的宽带却完全不是一个概念,中间的路由延迟也是个可观的数字。

热点内容
共享云源码 发布:2024-09-08 10:01:10 浏览:393
ios应用上传 发布:2024-09-08 09:39:41 浏览:439
ios储存密码哪里看 发布:2024-09-08 09:30:02 浏览:873
opensslcmake编译 发布:2024-09-08 09:08:48 浏览:653
linux下ntp服务器搭建 发布:2024-09-08 08:26:46 浏览:744
db2新建数据库 发布:2024-09-08 08:10:19 浏览:173
频率计源码 发布:2024-09-08 07:40:26 浏览:780
奥迪a6哪个配置带后排加热 发布:2024-09-08 07:06:32 浏览:101
linux修改apache端口 发布:2024-09-08 07:05:49 浏览:209
有多少个不同的密码子 发布:2024-09-08 07:00:46 浏览:566