PHP获取网页内容的几种方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
方法1: 用 file_get_contents 以get方式获取内容
<?php
$url = 'http://www.domain.com/?para=123' ;
$html = file_get_contents ( $url );
echo $html ;
?>
 
方法2:用 file_get_contents 函数,以post方式获取url
<?php
$url = 'http://www.domain.com/test.php?id=123' ;
$data = array ( 'foo' => 'bar' );
$data = http_build_query( $data );
 
$opts = array (
'http' => array (
    'method' => 'POST' ,
    'header' => "Content-type: application/x-www-form-urlencoded\r\n" .
                      "Content-Length: " . strlen ( $data ) . "\r\n" ,
    'content' => $data
)
);
$ctx = stream_context_create( $opts );
$html = @ file_get_contents ( $url , '' , $ctx );
 
如果需要再传递cookie数据,则把
'header' => "Content-type: application/x-www-form-urlencoded\r\n" .
                   "Content-Length: " . strlen ( $data ) . "\r\n" ,
修改为
'header' => "Content-type: application/x-www-form-urlencoded\r\n" .
                  "Content-Length: " . strlen ( $data ) . "\r\n" .
                  "cookie:cookie1=c1;cookie2=c2\r\n" ;
即可
 
方法3: 用 fopen 打开url, 以get方式获取内容
<?php
$fp = fopen ( $url , 'r' );
$header = stream_get_meta_data( $fp ); //获取报头信息
while (! feof ( $fp )) {
$result .= fgets ( $fp , 1024);
}
echo "url header: {$header} <br>" :
echo "url body: $result" ;
fclose( $fp );
?>
 
方法4: 用 fopen 打开url, 以post方式获取内容
<?php
$data = array ( 'foo2' => 'bar2' , 'foo3' => 'bar3' );
$data = http_build_query( $data );
 
$opts = array (
'http' => array (
'method' => 'POST' ,
'header' => "Content-type: application/x-www-form-urlencoded\r\nCookie:cook1=c3;cook2=c4\r\n" .
"Content-Length: " . strlen ( $data ) . "\r\n" ,
'content' => $data
)
);
 
$context = stream_context_create( $opts );
$html = fopen ( 'http://www.test.com/zzzz.php?id=i3&id2=i4' , 'rb' ,false, $context );
$w = fread ( $html ,1024);
echo $w ;
?>
 
方法5:用 fsockopen 函数打开url,以get方式获取完整的数据,包括header和body
<?php
function get_url ( $url , $cookie =false)
{
$url = parse_url ( $url );
$query = $url [path]. "?" . $url [query];
echo "Query:" . $query ;
$fp = fsockopen ( $url [host], $url [port]? $url [port]:80 , $errno , $errstr , 30);
if (! $fp ) {
return false;
} else {
$request = "GET $query HTTP/1.1\r\n" ;
$request .= "Host: $url[host]\r\n" ;
$request .= "Connection: Close\r\n" ;
if ( $cookie ) $request .= "Cookie:   $cookie\n" ;
$request .= "\r\n" ;
fwrite( $fp , $request );
while (!@ feof ( $fp )) {
$result .= @ fgets ( $fp , 1024);
}
fclose( $fp );
return $result ;
}
}
//获取url的html部分,去掉header
function GetUrlHTML( $url , $cookie =false)
{
$rowdata = get_url( $url , $cookie );
if ( $rowdata )
{
$body = stristr ( $rowdata , "\r\n\r\n" );
$body = substr ( $body ,4, strlen ( $body ));
return $body ;
}
 
    return false;
}
?>
 
方法6:用 fsockopen 函数打开url,以POST方式获取完整的数据,包括header和body
<?php
function HTTP_Post( $URL , $data , $cookie , $referrer = "" )
{
 
    // parsing the given URL
$URL_Info = parse_url ( $URL );
 
    // Building referrer
if ( $referrer == "" ) // if not given use this script as referrer
$referrer = "111" ;
 
    // making string from $data
foreach ( $data as $key => $value )
$values []= "$key=" .urlencode( $value );
$data_string =implode( "&" , $values );
 
    // Find out which port is needed - if not given use standard (=80)
if (!isset( $URL_Info [ "port" ]))
$URL_Info [ "port" ]=80;
 
    // building POST-request:
$request .= "POST " . $URL_Info [ "path" ]. " HTTP/1.1\n" ;
$request .= "Host: " . $URL_Info [ "host" ]. "\n" ;
$request .= "Referer: $referer\n" ;
$request .= "Content-type: application/x-www-form-urlencoded\n" ;
$request .= "Content-length: " . strlen ( $data_string ). "\n" ;
$request .= "Connection: close\n" ;
 
    $request .= "Cookie:   $cookie\n" ;
 
    $request .= "\n" ;
$request .= $data_string . "\n" ;
 
    $fp = fsockopen ( $URL_Info [ "host" ], $URL_Info [ "port" ]);
fputs ( $fp , $request );
while (! feof ( $fp )) {
$result .= fgets ( $fp , 1024);
}
fclose( $fp );
 
    return $result ;
}
 
?>
 
方法7:使用curl库,使用curl库之前,可能需要查看一下php.ini是否已经打开了curl扩展
<?php
$ch = curl_init();
$timeout = 5;
curl_setopt ( $ch , CURLOPT_URL, 'http://www.domain.com/' );
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER, 1);
curl_setopt ( $ch , CURLOPT_CONNECTTIMEOUT, $timeout );
$file_contents = curl_exec( $ch );
curl_close( $ch );
 
echo $file_contents ;
?>

php获得网页源代码抓取网页内容的几种方法

作者:admin    时间:2013-5-25 15:38:36    浏览: 21319

这里收集了3种利用php获得网页源代码抓取网页内容的方法,我们可以根据实际需要选用。

1、使用file_get_contents获得网页源代码

这个方法最常用,只需要两行代码即可,非常简单方便。

参考代码:

  • <?php
  • $fh= file_get_contents('http://www.webkaka.com/');
  • echo $fh;
  • ?>

2、使用fopen获得网页源代码

这个方法用的人也不少,不过代码有点多。

参考代码:

  • <?php
  • $fh = fopen('http://www.webkaka.com/', 'r');
  • if($fh){
  •     while(!feof($fh)) {
  •         echo fgets($fh);
  •     }
  • }
  • ?>

3、使用curl获得网页源代码

使用curl获得网页源代码的做法,往往是需要更高要求的人使用,例如当你需要在抓取网页内容的同时,得到网页header信息,还有ENCODING编码的使用,USERAGENT的使用等等。

参考代码一:

  • <?php
  • // 创建一个新cURL资源
  • $ch = curl_init();
  • // 设置URL和相应的选项
  • curl_setopt($ch, CURLOPT_URL, "http://www.webkaka.com/");
  • curl_setopt($ch, CURLOPT_HEADER, false);
  • // 抓取URL并把它传递给浏览器
  • $data = curl_exec($ch);
  • echo $data;
  • //关闭cURL资源,并且释放系统资源
  • curl_close($ch);
  • ?>

参考代码二:

  • <?php
  • $szUrl = "http://www.webkaka.com/";
  • $UserAgent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 3.5.21022; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';
  • $curl = curl_init();
  • curl_setopt($curl, CURLOPT_URL, $szUrl);
  • curl_setopt($curl, CURLOPT_HEADER, 0);  //0表示不输出Header,1表示输出
  • curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  • curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
  • curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
  • curl_setopt($curl, CURLOPT_ENCODING, '');
  • curl_setopt($curl, CURLOPT_USERAGENT, $UserAgent);
  • curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
  • $data = curl_exec($curl);
  • echo $data;
  • //echo curl_errno($curl); //返回0时表示程序执行成功 如何从curl_errno返回值获取错误信息
  • exit();
  • ?>

上例里使用了几个curl_setopt()参数的定义,HEADER、ENCODING、USERAGENT等,可以参考这里http://cn2.php.net/curl_setopt查看更多参数及用途。

需要注意的是,在使用curl_init()之前,你需要做下php.ini的安全设置,否则该函数不能执行。可以参考下这篇文章解决IIS运行PHP出现Call to undefined function curl_init()的问题进行设置。

导读fopen()和file_get_contents()打开URL获得网页内容的用法区别

Tags: php  fopen  file_get_contents  curl  

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值