我想从https://www.java.com/de/download/manual.jsp对于脱机安装程序,将x86和x64作为字符串。我该怎么做?
我可以用file_get_contents();
获得页面
$page = file_get_contents('https://www.java.com/de/download/manual.jsp');
我需要哪些函数来处理字符串?
我需要这部分源代码:
<a title="Download der Java-Software für Windows Offline" href="http://javadl.sun.com/webapps/download/AutoDL?BundleId=113217">
Windows Offline</a>
和
<a title="Download der Java-Software für Windows (64-Bit)" href="http://javadl.sun.com/webapps/download/AutoDL?BundleId=113219">
Windows Offline (64-Bit)</a>
问题是url可能在版本发布后发生更改。
Preg_match将发挥作用。
preg_match("'<a title='"Download der Java-Software für Windows Offline'" href='"(.*?)'">(.*?)</a>'si", $source, $match);
对于64位版本,情况类似。
preg_match("'<a title='"Download der Java-Software für Windows '(64-Bit')'" href='"(.*?)'">(.*?)</a>'si", $source, $match);
match[1]在这两种情况下都会提供下载链接。这些模式依赖于"title"属性中的文本,所以如果这一点没有改变,下载链接也没有改变,那就不会有问题。
$page = file_get_contents('https://www.java.com/de/download/manual.jsp');
preg_match("'<a title='"Download der Java-Software für Windows Offline'" href='"(.*?)'">(.*?)</a>'si", $page, $match);
preg_match("'<a title='"Download der Java-Software für Windows '(64-Bit')'" href='"(.*?)'">(.*?)</a>'si", $page, $match1);
$d_x86 = $match[0];
$d_x64 = $match1[0];
preg_match("'http*://'w+.'w+.'w+/'w+/'w+/'w+.'w+='d+'", $d_x86, $match3);
preg_match("'http*://'w+.'w+.'w+/'w+/'w+/'w+.'w+='d+'", $d_x64, $match4);
$d_x86_url = $match3[0];
$d_x64_url = $match4[0];
echo "<a href='"$d_x86_url'">Download aktuellste JRE für Windows x86</a><br>";
echo "<a href='"$d_x64_url'">Download aktuellste JRE für Windows x64</a>";
我建议您使用漂亮的PHP DOM扩展来访问HTML文档中所有必需的节点和属性:
<?php
$dom = new DOMDocument();
$dom->loadHTMLFile('https://www.java.com/de/download/manual.jsp');//load and parse document
$links = $dom->getElementsByTagName('a');//get all 'a' tags in document
foreach ($links as $link) {//iterate on all 'a' tags
if($link->getAttribute('title') == 'Download der Java-Software für Windows Offline')
{
echo $link->nodeValue . '<br/>';//or do whatever you want
}
}
?>