首先来看看这里,
www.zedge.net/txts/4519/
这个页面有很多短信,我希望我的脚本打开每条消息并下载它, 但我遇到了一些问题,
这是我打开页面的简单脚本,
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.zedge.net/txts/4519");
$contents = curl_exec ($ch);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_close ($ch);
?>
页面下载很好但我如何逐个打开此页面中的每个文本消息页面并将其内容保存在文本文件中, 我知道如何使用curl在文本文件中保存网页的内容,但在这种情况下,页面内有很多不同的页面我已经下载了如何逐个打开它们?
我有这个想法,但不知道它是否会起作用,
下载本页,
www.zedge.net/txts/4519
查找页面内所有文本消息链接页面并将每个链接保存到一个文本文件中(每行一个),然后运行另一个curl会话,打开文本文件逐个读取每个链接,打开它复制特定DIV中的内容,然后将其保存在新文件中。
答案 0 :(得分:3)
算法很简单:
www.zedge.net/txts/4519
// Load main page
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, "http://www.zedge.net/txts/4519");
$contents = curl_exec ($ch);
$dom = new DOMDocument();
$dom->loadHTML( $contents);
// Filter all the links
$xPath = new DOMXPath( $dom);
$items = $xPath->query( '//a[class=myLink]');
foreach( $items as $link){
$url = $link->getAttribute('href');
if( strncmp( $url, 'http', 4) != 0){
// Prepend http:// or something
}
// Open sub request
curl_setopt($ch, CURLOPT_URL, "http://www.zedge.net/txts/4519");
$subContent = curl_exec( $ch);
}
请参阅xPath::query
的文档和示例,请注意DOMNodeList
实施Traversable
,因此您可以使用foreach
。
提示:
COOKIE_JAR_FILE
sleep(...)
不要使服务器泛滥答案 1 :(得分:2)
我使用DOM作为代码部分。我使用getElementsByTagName('td')
调用了我的愿望页面并过滤了数据
在这里,我想从设备页面获取继电器的状态。每次我想要更新继电器的状态。因为我使用下面的代码。
$keywords = array();
$domain = array('http://USERNAME:PASSWORD@URL/index.htm');
$doc = new DOMDocument;
$doc->preserveWhiteSpace = FALSE;
foreach ($domain as $key => $value) {
@$doc->loadHTMLFile($value);
//$anchor_tags = $doc->getElementsByTagName('table');
//$anchor_tags = $doc->getElementsByTagName('tr');
$anchor_tags = $doc->getElementsByTagName('td');
foreach ($anchor_tags as $tag) {
$keywords[] = strtolower($tag->nodeValue);
//echo $keywords[0];
}
}
然后我在$keywords[]
数组中获得所需的中继名称和状态。
我在这里分享输出的。
如果要阅读主页面中的所有消息。然后首先你必须收集单独消息的所有链接。然后您可以将它用于进一步的相同过程。