`

PHP 利用Curl实现多线程抓取网页和下载文件

阅读更多

PHP 利用 Curl 可以完成各种传送文件操作,比如模拟浏览器发送GET,POST请求等等,然而因为php语言本身不支持多线程,所以开发爬虫程序效率并不高,一般采集数据可以利用 PHPquery类来采集数据库,在此之外也可以用 Curl ,借助Curl 这个功能实现并发多线程的访问多个url地址以实现并发多线程抓取网页或者下载文件。

 

1、实现抓取多个URL并将内容写入指定的文件

<?php 
$urls = array(
	'http://test.onestopweb.cn/demo1.php',
	'http://test.onestopweb.cn/demo2.php',
	'http://test.onestopweb.cn/demo3.php'
); // 设置要抓取的页面URL
$save_to='test1.txt'; // 把抓取的代码写入该文件
$st = fopen($save_to,"a");
$mh = curl_multi_init();
foreach ($urls as $i => $url) {
	$conn[$i] = curl_init($url);
	curl_setopt($conn[$i], CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)");
	curl_setopt($conn[$i], CURLOPT_HEADER ,0);
	curl_setopt($conn[$i], CURLOPT_CONNECTTIMEOUT,60);
	curl_setopt($conn[$i], CURLOPT_FILE,$st); // 将爬取的代码写入文件
	curl_multi_add_handle ($mh,$conn[$i]);
} // 初始化
do {
	curl_multi_exec($mh,$active);
} while ($active); // 执行
foreach ($urls as $i => $url) {
	curl_multi_remove_handle($mh,$conn[$i]);
	curl_close($conn[$i]);
} // 结束清理
curl_multi_close($mh);
fclose($st);
?>

效果图:

 

2、利用 PHP 的 Curl 实现抓取网页URL并保存内容
下面这段代码和上面差不多意思,只不过这个地方是将获得的代码先放入变量,然后再将获取到的内容写入指定的文件

<?php
$urls = array(
	'http://test.onestopweb.cn/demo1.php',
	'http://test.onestopweb.cn/demo2.php',
	'http://test.onestopweb.cn/demo3.php'
);
$save_to='test2.txt'; // 把抓取的代码写入该文件
$st = fopen($save_to,"a");
$mh = curl_multi_init();
foreach ($urls as $i => $url) {
	$conn[$i] = curl_init($url);
	curl_setopt($conn[$i], CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)");
	curl_setopt($conn[$i], CURLOPT_HEADER ,0);
	curl_setopt($conn[$i], CURLOPT_CONNECTTIMEOUT,60);
	curl_setopt($conn[$i],CURLOPT_RETURNTRANSFER,true); // 不将爬取代码写到浏览器,而是转化为字符串
	curl_multi_add_handle ($mh,$conn[$i]);
}
do {
	curl_multi_exec($mh,$active);
} while ($active);
foreach ($urls as $i => $url) {
	$data = curl_multi_getcontent($conn[$i]); // 获得爬取的代码字符串
	fwrite($st,$data); // 将字符串写入文件
} // 获得数据变量,并写入文件
foreach ($urls as $i => $url) {
	curl_multi_remove_handle($mh,$conn[$i]);
	curl_close($conn[$i]);
}
curl_multi_close($mh);
fclose($st);
?>

 效果图:

 

3、利用 PHP 的 Curl 实现并发多线程下载文件

<?php
$urls=array(
	'http://test.onestopweb.cn/data.zip',
	'http://test.onestopweb.cn/data2.zip',
	'http://test.onestopweb.cn/data3.zip'
);
$save_to='zip/';
$mh=curl_multi_init();
foreach($urls as $i=>$url){
	$g=$save_to.basename($url);
	if(!is_file($g)){
		$conn[$i]=curl_init($url);
		$fp[$i]=fopen($g,"w");
		curl_setopt($conn[$i],CURLOPT_USERAGENT,"Mozilla/4.0(compatible; MSIE 7.0; Windows NT 6.0)");
		curl_setopt($conn[$i],CURLOPT_FILE,$fp[$i]);
		curl_setopt($conn[$i],CURLOPT_HEADER ,0);
		curl_setopt($conn[$i],CURLOPT_CONNECTTIMEOUT,60);
		curl_multi_add_handle($mh,$conn[$i]);
	}
}
do{
	$n=curl_multi_exec($mh,$active);
}while($active);
foreach($urls as $i=>$url){
	curl_multi_remove_handle($mh,$conn[$i]);
	curl_close($conn[$i]);
	fclose($fp[$i]);
}
curl_multi_close($mh);
?>

 效果图:

 

 

 

 

 

 

  • 大小: 18.9 KB
  • 大小: 18.8 KB
  • 大小: 12.7 KB
2
1
分享到:
评论

相关推荐

    php利用curl实现多线程类.zip

    在这种情况下,单线程的请求方式效率低下,而利用curl实现多线程可以显著提高处理速度。本文将深入探讨如何在PHP中利用curl创建多线程类,以提升程序的性能。 首先,我们要理解curl在PHP中的作用。cURL是客户端URL...

    php结合curl实现多线程抓取

    在PHP中,我们可以利用cURL库来实现多线程数据抓取,这在处理大量网页数据...以上就是PHP结合cURL实现多线程抓取的基本原理和示例。通过这个技术,开发者可以在处理大量网页数据时提高效率,实现更高效的数据抓取任务。

    CURL多线程类库

    使用这个CURL多线程类库,开发者可以实现批量下载、数据抓取、分布式爬虫等多种复杂场景,大大提高PHP处理网络请求的效率。需要注意的是,在实际应用中,应考虑服务器资源限制,合理设置线程数量,避免过度消耗内存...

    PHP使用CURL实现多线程抓取网页

    PHP 利用 Curl 可以完成各种传送文件操作,比如模拟浏览器发送GET,POST请求等等,然而因为php语言本身不支持多线程,所以开发爬虫程序效率并不高,不过可以用 Curl ,借助Curl 这个功能实现并发多线程的访问多个url...

    php的curl多线程采集.zip

    在标题为"php的curl多线程采集.zip"的文件中,我们讨论的是如何利用PHP的cURL库进行多线程数据采集,这在大数据抓取、网页爬虫或自动化测试场景中非常有用。 首先,我们需要了解什么是多线程。在计算机科学中,多...

    CurlMulti 一个php多线程类库

    QueryList是一个强大的PHP网页数据抓取框架,它集成了CurlMulti库,使得在进行大规模数据抓取时,能够利用多线程高效地处理大量URL。通过CurlMulti,QueryList可以在抓取过程中实现并发请求,提高爬虫的速度和性能...

    php多线程获取网页

    php多线程获取网页,利用curl_multi同时请求多个url,并发请求,缩短执行等待时间

    PHP多线程抓取多个网页及获取数据的通用方法.pdf

    本文将详细介绍如何使用PHP多线程抓取多个网页及获取数据的通用方法,并通过实例演示如何使用CURL多线程抓取Adobe公司提供的免費网络相册的图片外链地址。 多线程抓取的必要性 在PHP环境下抓取多个网页可以使用...

    php的curl多线程采集

    ### PHP中的cURL多线程采集原理 1. **多会话并发**:`cURL`支持同时开启多个会话(`multi handle`),每个会话可以处理一个URL的请求。通过`curl_multi_init()`函数创建一个多会话管理器,然后为每个URL创建单独的`...

    PHP通过CURL下载文件

    - **并发下载**:利用多线程或多进程技术,可以实现同时下载多个文件,提高下载效率。 - **断点续传**:在下载过程中如果出现中断,可以记录已下载的部分,并在下次尝试下载时跳过这部分,实现断点续传功能。 综上...

    php多线程批量采集下载图片的实现代码函数类

    下面我们将深入探讨如何利用PHP和curl实现多线程图片采集与下载: 1. **pthreads扩展**:pthreads是PHP的一个多线程扩展,允许在PHP脚本中创建和管理线程。首先,确保你的PHP环境已经安装了这个扩展。在Windows上,...

    PHP使用CURL_MULTI实现多线程采集的例子

    总之,PHP的CURL_MULTI提供了一种高效的方式来进行多线程采集,通过合理利用它可以显著提升Web数据抓取和下载的效率。在实际项目中,根据具体需求进行适当的调整和优化,可以更好地发挥它的作用。

    利用curl 多线程 模拟 并发的详解

    在PHP中,我们可以利用`curl`的多线程功能来实现并发请求,提高效率,避免逐个请求的耗时。本文将详细讲解如何利用`curl`的多线程功能模拟并发。 首先,我们需要了解PHP中的`curl`多线程函数: 1. `curl_multi_...

    PHP多线程图片处理

    在PHP中实现多线程处理图片是一项...通过理解和熟练运用上述知识点,开发者可以利用PHP和CURL扩展实现高效的多线程图片处理。虽然这需要一些额外的工作,但最终的结果将是一个更加响应快速、用户体验良好的应用程序。

    php中curl模拟并发经典多线程

    这是一个经典的curl模拟多线程操作,缺点是总耗费时间取决于最慢的一个响应,网上有很多,只是用代码实现了一下,这是一个获取搜狗rank的示例

    PHP多线程抓取网页实现代码

    首先,让我们深入理解如何使用Curl Multi Functions来实现多线程抓取网页。以下两个示例代码分别展示了两种不同的处理方式: **代码1** 直接将获取的网页内容写入文件: ```php &lt;?php $urls = array('...

    php多线程类库.zip

    在这种情况下,我们可以借助第三方类库,如"CurlMulti",来实现PHP的多线程功能。 "CurlMulti" 是一个基于cURL扩展的PHP类库,它允许开发者同时处理多个HTTP请求,从而实现多线程的效果。cURL本身是一个强大的库,...

Global site tag (gtag.js) - Google Analytics