我目前正在创建某种抓取工具/代理服务器。它可以浏览网站,并在浏览时仍保留在我的网站上。但我在加载网站时考虑过,同时获取所有链接和数据。
因此该网站包含许多"< tr>"(没有空格)再次包含很多其他东西。
以下是网站上许多例子:
<tr>
<td class="vertTh">
<center>
<a href="/s/browse/other.php">Other</a>
<br>
<a href="/s/browse/documents.php">Document</a>
</center>
</td>
<td>
<div class="Name">
<a href="/s/database/Document_Title_Info" class="Link">Document Title Info</a>
</div>
<a href="http://example.com/source/to/document/which%20can%20be%20very%20long%20and%20have%20weird%20characters" title="Source">
<img src="/static/img/icon-source.png" alt="Source">
</a>
<font class="Desc">Uploaded 03-24 14:02, Size 267.35 KB, ULed by <a class="Desc" href="/s/user/username/" title="Browse username">username</a></font>
</td>
<td align="right">67</td>
<td align="right">9</td>
</tr>
用户浏览代理网站,当他们这样做时,它会从原始网站上获取信息。 我想出了如何在两个单词之间得到一个字符串,但我不知道如何将它变成一个&#34; foreach&#34;代码或其他东西。
所以,让我们说我想得到源链接。然后我会做这样的事情:
$url = $_GET['url'];
$str = file_get_contents('https://database.com/' . $url);
$source = 'http://example.com/source/to/' . getStringBetween($str,'example.com/source/to/','" title="Source">'); // Output looking like this: http://example.com/source/to/document/which%20can%20be%20very%20long%20and%20have%20weird%20characters
function getStringBetween($str,$from,$to)
{
$sub = substr($str, strpos($str,$from)+strlen($from),strlen($str));
return substr($sub,0,strpos($sub,$to));
}
但我不能这样做,因为这些字符串有多个。所以我想知道是否有任何一种方法可以获得所有这些字符串的来源,名称和大小?
答案 0 :(得分:-1)
您可能希望使用preg_match_all
,以便获得许多匹配项的列表。然后你可以循环它。
http://php.net/manual/en/function.preg-match-all.php
$html = '<tr>
<td class="vertTh">
<center>
<a href="/s/browse/other.php">Other</a>
<br>
<a href="/s/browse/documents.php">Document</a>
</center>
</td>
<td>
<div class="Name">
<a href="/s/database/Document_Title_Info" class="Link">Document Title Info</a>
</div>
<a href="http://another-example.com/source/to/document/which%20can%20be%20very%20long%20and%20have%20weird%20characters" title="Source">
<img src="/static/img/icon-source.png" alt="Source">
</a>
<a href="http://example.com/source/to/document/which%20can%20be%20very%20long%20and%20have%20weird%20characters" title="Source">
<img src="/static/img/icon-source.png" alt="Source">
</a>
<font class="Desc">Uploaded 03-24 14:02, Size 267.35 KB, ULed by <a class="Desc" href="/s/user/username/" title="Browse username">username</a></font>
</td>
<td align="right">67</td>
<td align="right">9</td>
</tr>';
// use | as delimiter for pattern to make it a little cleaner
preg_match_all('|href="(http://.+?)" title="Source"|', $html, $matches);
// loop over $matches
var_dump($matches);
foreach ($matches[1] as $match) {
// $match == http://example.com/source/to/document/which%20can%20be%20very%20long%20and%20have%20weird%20characters
}
您可以在... http://phpfiddle.org/尝试此示例,也可以在本地.php
文件中运行。祝你好运。
仅供参考:我添加了一个额外的锚标记来说明找到另一个来源。