我正在使用simpile_html_dom来获取html页面元素.我有一些像这样的div元素.我想要的只是在每个div中得到"Fine Thanks"句子(不在任何子元素内).我该怎么做?
<div class="right">
<h2>
<a href="">Hello</a>
</h2>
<br/>
<span>How Are You?</span>
<span>How Are You?</span>
<span>How Are You?</span>
Fine Thanks
</div>
Run Code Online (Sandbox Code Playgroud) 如何通过识别其"评论"标签来获取DOM块,例如
<!-- start block -->
<p>Hello world etc</p>
<div>something</div>
<!-- end of block -->
Run Code Online (Sandbox Code Playgroud)
我正在使用Simple PHP DOM解析器,但文档不完整,http://simplehtmldom.sourceforge.net/manual.htm.如果我能用纯PHP做到这一点就好了.
我有点'生锈与PHP,因为它发生有时我使用它几个星期有时它会发生你几个月没用.无论哪种方式,我试图传递另一个数组的值是"数组",在另一个数组上有序地...我想要做的主要是创建一个键,允许我每行组织增量值,特别是;
数组内容
Array
(
[key] => value
[2] => 1
[3] => Inter
[4] => 4
[5] => 4
[6] => 0
[7] => 0
[8] => 5
[9] => 1
[10] => +4
[11] => 12
[12] => Chievo Verona - Inter 0 - 1
[13] => Inter - Milan 1 - 0
[14] => Carpi - Inter 1 - 2
[15] => Inter - Atalanta 1 - 0
[16] => ;
[17] => 2
[18] => Torino
[19] …Run Code Online (Sandbox Code Playgroud) 这是我的代码:
<?php
include('simple_html_dom.php');
$html = file_get_html('http://www.google.com/search?q=BA236',false);
$title=$html->find('div#ires', 0)->innertext;
echo $title;
?>
Run Code Online (Sandbox Code Playgroud)
它会在搜索"BA236"下输出Google搜索页面的所有结果.
问题是我不需要所有这些,我需要的信息是在没有id或类或其他任何内容的div中.
我需要的div是第一个
<div class="g">
Run Code Online (Sandbox Code Playgroud)
在页面上,所以也许我应该尝试这样的事情:
<?php
include('simple_html_dom.php');
$html = file_get_html('http://www.google.com/search?q=BA236',false);
$title=$html->find('div[class=g], 0')->innertext;
echo $title;
?>
Run Code Online (Sandbox Code Playgroud)
但问题是,如果我加载页面,它除了显示我之外什么都没有:
注意:尝试在第4行的C:\ xampp\htdocs ...\simpletest2.php中获取非对象的属性
那我怎么能得到我正在寻找的div以及我做错了什么?
编辑:
解:
<?php
include('simple_html_dom.php');
$html = file_get_html('http://www.google.com/search?q=BA236',false);
$e = $html->find("div[class=g]");
echo $e[0]->innertext;
?>
Run Code Online (Sandbox Code Playgroud)
要么:
<?php
include('simple_html_dom.php');
$html = file_get_html('http://www.google.com/search?q=BA236',false);
$title=$html->find('div[class=g]')[0]->innertext;
echo $title;
?>
Run Code Online (Sandbox Code Playgroud) 我只是从提到的Parser开始,并以某种方式直接在开始时运行问题.
参考本教程:
我现在想要在一个源代码中找到一个带有类ClearBoth Box的div的内容
我用curl检索代码并创建一个简单的html dom对象:
$cl = curl_exec($curl);
$html = new simple_html_dom();
$html->load($cl);
Run Code Online (Sandbox Code Playgroud)
然后我想将div的内容添加到一个名为divs的数组中:
$divs = $html->find('div[.ClearBoth Box]');
Run Code Online (Sandbox Code Playgroud)
但是现在,当我print_r $ divs时,它提供了更多,尽管事实上源代码在div中没有更多.
像这样:
Array
(
[0] => simple_html_dom_node Object
(
[nodetype] => 1
[tag] => br
[attr] => Array
(
[class] => ClearBoth
)
[children] => Array
(
)
[nodes] => Array
(
)
[parent] => simple_html_dom_node Object
(
[nodetype] => 1
[tag] => div
[attr] => Array
(
[class] => SocialMedia
)
[children] => Array
(
[0] => …Run Code Online (Sandbox Code Playgroud) 我一直在使用CURL来抓取网站一段时间以及简单的HTML DOM.我经历过CURL对于抓取网站要好得多.但是我真的很喜欢Simple HTML DOM的简单性.所以我想为什么不把两者结合起来,我试过:
require_once('simple_html_dom.php');
$url = 'http://news.yahoo.com/';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$curl_scraped_page = curl_exec($ch);
$html = new simple_html_dom();
$html->load($curl_scraped_page);
foreach($html->find('head') as $d) {
$d->innertext = "<base href='$url'>" . $d->innertext;
}
echo $html->save();
Run Code Online (Sandbox Code Playgroud)
我尽我所能,但它不起作用.我还能尝试什么?
我需要使用 API 不支持的谷歌反向图像搜索来获取一些图像,但幸运的是,您可以使用指向图像的直接链接查询谷歌,它仍然显示结果,因此:
$googleURL = "https://www.google.com/searchbyimage?&image_url=".$imageURL;
echo $googleURL;
Run Code Online (Sandbox Code Playgroud)
输出:
https://www.google.com.au/search?tbs=sbi:AMhZZiu9rNRW4ETWGjN9XYQKsa21UHM7j_1TjMjXvYyNH1knVTyMGZGNmS2yme4CsQb0T7UViTyNrG4e8u_1xLY-dZCU16wkfdUakeY7idDwyMge78nT--Grpll4t9_1fp4YPTsJyKRUANzw1Iyctsko7OZbkYES3VUHtyNy9l9RJf12YOdEvVOxSZCO6-JPxO0PpZ5p79Rr-eDUrqENWYVbk4qojafKMTVfuXvoACQ9iykI-DMVbP9n_1o0YkdKTdUeK2r30wg4Oe2BqspoXlI_11rxySuK6TolPM6z58E6erTT0bnYfXTlyDMBfOwgSfhbn2ipLrNHgNdqyk-YhmMP0_1ZzqVyZrgMz-I5cfH9N65nX6bhZfos0lgr8_15V6ZHtX0_1p8s5r229JDrwzlwnjwOBLgP1inmEORCaKOlcfHbyPnU3n04pIfLGu5fWYpbmFJwtK_1vaJvS0uFb6Pkh_1uv0wvz_10yf4O6E1IvBSoMudcYy4cmJ1zegJJ9L50C0bzXFIRUb62lcPJWbkZNR44Tz378nOSXd-PND0JfKQ-TujT3KfC_1O241knvr9Eb3LbuvncGiCMoPgxlUY4r9B_1KWchNWhJVTJz9omeiygwz5K_13YkjuLg52UF6YWvLedCxgRoUpuj9kFdmYt-b9Tn2VEZG8yfiLm3OTkZnlVYtPF87LLQAHH24VpLMoV0oDllHDK3xOXhvusl_1K2Me9tTdK15PPG7oreeWfYRztQwTpG4iB5GAnaj687OQukvxX5hNFIqXx_1QSuNooDhIP1eJl-6QYfuI4MPasj6flSMom7HYTSjyjcsQKw0Prj1bBsJY6qH1qyLrF1f1_1Ql0COERnbOV7O5mTOuTkNWarmR5wzE06qbgsrtT95ENqafd81ppHbA0Jyg-xQ8TLV-dSp1QDAtiYAHI_11tCwsDtrak4jDS4qAfEJCw_1lb9urJqqajvp25jLH2_1mN3u0eeW7xNF-PljofyhI0iIWYSg6ghyOVRIaT_1c6klKUPvOrquZy8hMCZWHb3CYZNGJeKTnACCyYW1MNVUsYnoFWORN6hvkVlUk0beFXvA_1W2vaoedLjj-fN1y8_1dPOiBROLYtv85nq01csCKk7Eib6p2b_131wEeQBYocoYU0sGTv2_1dhOvSXRPGTnrbZlNDbJFUtH4pF9tMQj5-Fh_1lw9TTXGCjQ9UjOSLD5q7tNjCQU1As1uCQBvmZvxo7J3gZSAcj_19wXfHZCOsA8g-WA97V-2b62ia4RFOehQ38hoXoK7MCSDLnVtJTsKQz9HuEreXm8qGQlbDzfr7JFuHHe2MOyChwnL_1gzRnZd8uv2OIM0nzKh_1wg4T1KCXv3NSGNkSyNxpYXFJ161Sv3NpQQI3epBMiYA_1AcQDiCxOTQvWj00e5EXaXN22CDRWRq3uk4HWj2eXcR6-TGmsYEfSGX9nyQwK1DHp9yaNjk9Bal7rNHUAe_1eMDsCWW9htaLyiMTio0eXyTumVrlt7ShZVd8oSPOj8U0ilY9owH95jz7LsI8vUnzF-FC2m_1yNt3xe4ZAcsRTbYQXTN3Ga76vTQBPu8oz0gkYmDTA&gws_rd=cr&ei=wAHVVJOVLIeeugSZ64A4
Run Code Online (Sandbox Code Playgroud)
..现在在这个页面上,我需要点击链接到实际结果页面,所以我的情况看起来像:
if a.text == 'Large'
elseif a.text == 'Medium'
elseif a.text == 'Visually similar images'{
// crawl the link
// get direct links of top 10 results
}
Run Code Online (Sandbox Code Playgroud)
但我不确定如何:
href是否满足条件a.text == 'Large',因为Simple HTML DOM Parser或PHPQuery两者都没有this像 jQuery。jsaction="mousedown:irc.rl;keydown:irc.rlk" 这是我想要做的快速截屏:https ://www.dropbox.com/s/c8g7fs5m5zqcegb/2015-02-07_08-56-23.mp4 ? dl =0 (5.9mb)
我已经使用PHP Simple HTML DOM解析器首先通过str_get_html()simple_html_dom.php方法将HTML字符串转换为DOM对象。
$summary = str_get_html($html_string);
Run Code Online (Sandbox Code Playgroud)
然后我提取的<img>对象从$summary由
foreach ($summary->find('img') as $img) {
$image = $img;
break;
}
Run Code Online (Sandbox Code Playgroud)
现在,我需要将$ image DOM对象转换回字符串。我使用了这里提到的面向对象的方式:
$image_string = $image->save();
Run Code Online (Sandbox Code Playgroud)
我收到了错误(来自Moodle调试器):
致命错误:调用未定义的方法simple_html_dom_node :: save()...
所以我想,因为我正在使用Moodle,所以可能与Moodle有关,所以我只是从同一本手册中进行了简单的(非面向对象的?)方式:
$image_string = $image;
Run Code Online (Sandbox Code Playgroud)
然后只是为了检查/确认它已被转换为字符串,我做了:
echo '$image TYPE: '.gettype($image);
echo '<br><br>';
echo '$image_string TYPE: '.gettype($image_string);
Run Code Online (Sandbox Code Playgroud)
但这打印:
$image TYPE: object
$image_string TYPE: object
Run Code Online (Sandbox Code Playgroud)所以问题是为什么?难道我做错了什么?
我正在尝试div.element使用>组合器选择父母的(直接)孩子,但它失败了.
HTML:
<div class="element">
<p>test</p>
</div>
<div class="element">
<div class="selected">
<p>test2</p>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
PHP:
$html->find('div.element > p', 0);
Run Code Online (Sandbox Code Playgroud)
我期待选择直接p元素.
如果它是嵌套的后代 - 它不应返回任何内容,但它会返回test2.
我该如何写回来test,但不是test2吗?谢谢
更新:关于SO的一般共识似乎是简单的HTML DOM是坏的.我最后DOMDocument根据Phil 的建议使用PHP编写代码.我测试了Nevermind的解决方案,它确实也有效.感谢所有帮助和Happy Coding
目前我正在从事一个项目,该项目要求我解析来自替代网站的一些数据,但我遇到了一些问题(请注意,我对PHP编码非常陌生。)
这是我在下面使用的代码 + 它返回的内容。
$dl = $html2->find('ol.tracklist',0);
print $dl = $dl->outertext;
Run Code Online (Sandbox Code Playgroud)
上面的代码返回我们想要获取的数据,它在下面但非常混乱,如果你想看点击这里。
但是,当我把它放在 foreach 中时,它一次只返回一个a href属性。
foreach($html2->find('ol.tracklist') as $li)
{
$title = $li->find('a',0);
print $title;
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能返回a href上面示例代码中的所有元素?
注意:我为此使用 simple_html_dom.php。