有几个我从浏览器运行的自定义PHP脚本,脚本将抓取任何给定的URL并以浏览器中的表格形式返回数据或作为excel文件。 (可选)
问题在于,每当我向脚本添加3个以上的URL时,我遇到网络连接错误(由对等方重置连接)可能是由多种原因引起的。 然后,如果按表返回数据,则结果将被截断,如果通过Excel文件,下载文件将在某个时间点停止"网络错误"
我正在我的localmachine(XAMPP)上运行脚本,我在几台实时服务器上测试过,发生了同样的问题,但是,我注意到在实时服务器上连接会持续更长时间。我收到来自托管服务提供商的警告说,脚本不应再在他们的服务器上运行,因为它使用了大量内存(+ 1GB RAM)并且正在减慢它们的速度。我假设我将在本地主机上恢复测试。
问题:
是否有任何配置/建议可以防止错误"连接由同行重置"
我有超过80个网址(相同的域名)我想每周抓一次。将脚本拆分为80个脚本(每个URL 1)并独立运行每个脚本。不是很实用,但是在主脚本上以60秒的时间间隔一个接一个地运行多个脚本的好方法/ Php脚本是什么?
这是我输入网址的一段代码:
<?php
//to do link
$OutPut_Excel = $_GET['xls'];// 0 web page or 1 output excel
$show_Name = $_GET['show'];// 0 or 1
$urls = "http://www.URL1.com;
http://www.URL2.com;
http://www.URL3.com;
http://www.URL4.com;
http://www.URL5.com;
http://www.URL6.com;
http://www.URL7.com
";
//output excel
if($OutPut_Excel == "1")
{
header("Content-Type: application/vnd.ms-execl;charset=iso-8859-1");
header("Content-Disposition: attachment; filename=data.xls");
header("Pragma: no-cache");
header("Expires: 0");
}
set_time_limit(0);
ini_set('memory_limit', '-1');
ini_set('display_errors',true);
//output html
if($OutPut_Excel == "0")
{
?>
<html>
<head>
title>scraper</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php
}
if($OutPut_Excel == "0")
{
if($show_Name)
{
$nametext = '<td>Name</td>';
}
echo "<table border='1'><tr><td>Name</td><td>Code</td>
<td>City</td><td>Address</td><td>E-mail</td><td>Phone/td> <td>Url</td>$nametext</tr>";
ECT ......
如果脚本运行为:
只要数据不被连接错误截断,任何一种方法都可以。
我非常感谢您找到解决方案的任何帮助,因为我是初学者并且一直在学习PHP。
提前感谢你, 拉吉
答案 0 :(得分:0)
关于第二个问题,您可以编写一个循环来执行第二个脚本或函数来检索URL。你应该有一个包含所有要删除的链接的数组,并为每个链接运行该函数或脚本,每次运行后60秒就会休眠。这只是我头脑中的示例代码,未经测试:
$links = array('URL1', 'URL2', ...);
foreach ($link as $l) {
runScraper($l);
sleep(60);
}
runScraper方法可以调用system()或exec()在另一个PHP进程中运行脚本。
关于您获得的错误,这可能是由于对服务器的过多请求。在如此短的时间内N页请求后,您尝试访问的服务器可能会阻止您。