我想输入一个很长的网址列表,并在源代码中搜索特定字符串,输出包含字符串的网址列表。听起来很简单吧?我想出了波纹管代码,输入是一个html表单。你可以在pelican-cement.com/findfrog上试试。
它似乎工作了一半的时间,但是被不同顺序的多个网址/网址抛弃了。正确地搜索'adsense'会将politics1.com从
中删除cnn.com
politics1.com
但是,如果反转,则输出为空白。如何获得可靠,一致的结果?最好是我可以输入成千上万的网址?
<html>
<body>
<?
set_time_limit (0);
$urls=explode("\n", $_POST['url']);
$allurls=count($urls);
for ( $counter = 0; $counter <= $allurls; $counter++) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$urls[$counter]);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST,'GET');
curl_setopt ($ch, CURLOPT_HEADER, 1);
curl_exec ($ch);
$curl_scraped_page=curl_exec($ch);
$haystack=strtolower($curl_scraped_page);
$needle=$_POST['proxy'];
if (strlen(strstr($haystack,$needle))>0) {
echo $urls[$counter];
echo "<br/>";
curl_close($ch);
}
}
//$FileNameSQL = "/googleresearch" . abs(rand(0,1000000000000000)) . ".csv";
//$query = "SELECT * FROM happyturtle INTO OUTFILE '$FileNameSQL' FIELDS TERMINATED BY ','";
//$result = mysql_query($query) or die(mysql_error());
//exit;
echo '$FileNameSQL';
?>
</body>
</html>
答案 0 :(得分:1)
也许你应该打电话给
curl_close($ch);
无论是否在抓取页面中找到字符串。除此之外,我没有看到任何明显错误的代码。
如果它不是代码中的东西,那么它在抓取页面中可能有些不同。也许该页面是动态的,并且在随后的检查中并不总是包含针字。也许您尝试抓取的页面的服务器返回了错误代码。
答案 1 :(得分:1)
一些调整,不确定它们是否会有所帮助,但仍然
$url_to_go = trim($urls[$counter]);
if($url_to_go){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url_to_go);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST,'GET');
curl_setopt ($ch, CURLOPT_HEADER, 1);
$curl_scraped_page=curl_exec($ch);
curl_close($ch);
// more code follows
}
答案 2 :(得分:1)
可能是丢弃的网址周围的回车/空格吗?可能值得投入
$urls[$counter] = trim($urls[$counter]);
在你的for循环开始时。
此外:
if (strpos($haystack, $needle) !== false) {
[...]
}
是检查一个字符串是否包含另一个字符串的更有效方法。你也可以在这里使用stripos而不是strtolower()首先完成整个事情(不确定这是否会改善事情)。
答案 3 :(得分:1)
重新整理了一下你的代码。罪魁祸首是空白。您需要在使用之前修剪您的URL字符串(即trim($url);
)。
其他变化:
以下代码可以在my quick mockup上运行。
<html>
<body>
<form action="search.php" method="post">
URLs: <br/>
<textarea rows="20" cols="50" input type="text" name="url" /></textarea><br/>
Search Term: <br/>
<textarea rows="20" cols="50" input type="text" name="proxy" /></textarea><br/>
<input type="submit" />
</form>
<?
if(isset($_POST['url'])) {
set_time_limit (0);
$urls = explode("\n", $_POST['url']);
$term = $_POST['proxy'];
$options = array( CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HEADER => 1,
);
$ch = curl_init();
curl_setopt_array($ch, $options);
foreach ($urls as $url) {
curl_setopt($ch, CURLOPT_URL, trim($url));
$html = curl_exec($ch);
if ($html !== FALSE && stristr($html, $term) !== FALSE) { // Found!
echo $url;
}
}
curl_close($ch);
}
?>
</body>
</html>