我只是从提到的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)所以问题是为什么?难道我做错了什么?
目前我正在从事一个项目,该项目要求我解析来自替代网站的一些数据,但我遇到了一些问题(请注意,我对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。
我有一个看起来像这样的html片段(当然包围其他html):
<p class="finfot3"><b>Header:</b></p>
<p>Text</p>
Run Code Online (Sandbox Code Playgroud)
我怎么能从中得到Text这个?我正在使用simple_html_dom,但如果simple_html_dom不能这样做,我可以使用其他东西.
SimpleHtmldom可用于使用类提取第一个元素的内容description.
$html = str_get_html($html);
$html->find('.description', 0)
Run Code Online (Sandbox Code Playgroud)
但是,如果此类不存在,PHP将抛出错误
Trying to get property of non-object
我试过了
if(!isset($html->find('.description', 0))) {
echo 'not set';
}
Run Code Online (Sandbox Code Playgroud)
和
if(!empty($html->find('.description', 0))) {
echo 'not set';
}
Run Code Online (Sandbox Code Playgroud)
但两者都给出了错误
Can't use method return value in write context
Run Code Online (Sandbox Code Playgroud)
检查元素是否存在的正确方法是什么?
我认为PHP没有用,因为执行php后会插入iframe,还是我错了?
因此,我知道的唯一解决方案是使用Javascript / jQuery。
例如,如果JS与iframe位于同一页面上,则此方法有效:
<html>
<head>
<title></title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js"></script>
<script type="text/javascript">
$(function() {
var myContent = $("#iFrame").contents().find("#myContent")
});
</script>
</head>
<body>
<iframe src="mifile.html" id="iFrame" style="width:200px;height:70px;border:dotted 1px red" frameborder="0">
<div id="myContent">
iframe content blablabla
</div>
</iframe>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
但是我正在使用简单HTML DOM库来抓取遥远的网页,例如:
$url = 'http://page-with-some-iframe.com/';
$html = file_get_html( $url );
// Find iframes and put them in an array
$iframes_arr = array();
foreach($html->find('iframe') as $element) {
$iframes_arr[] = $element->outertext;
}
var_dump($iframes_arr);
die();
Run Code Online (Sandbox Code Playgroud)
但很明显,什么也不会返回;(,因为在php运行后会显示iframe;(
所以,我在想我可能需要注入以下代码:
<script type="text/javascript">
$(function() {
var myContent = …Run Code Online (Sandbox Code Playgroud) 我使用PHP Simple Html Dom来获取一些HTML,现在我有一个像跟随代码的html dom,我需要获取纯文本内部div,但避免使用p标签及其内容(仅返回111111),谁可以帮助我?谢谢提前!
<div>
<p>00000000</p>
111111
<p>22222222</p>
</div>
Run Code Online (Sandbox Code Playgroud) HTML:
<div class="something" data-a="abc">ddsf</d>
Run Code Online (Sandbox Code Playgroud)
PHP:
foreach ($dom->find('.something[data-rel]') as $this) {
var_dump($this->attr());
}
Run Code Online (Sandbox Code Playgroud)
我试过这个但错误。在其文档中找不到任何信息。我想获得data-aabc 的值。
php ×10
simple-html-dom ×10
dom ×2
parsing ×2
curl ×1
gettype ×1
html ×1
if-statement ×1
iframe ×1
jquery ×1
moodle ×1
regex ×1
web-scraping ×1