标签: simple-html-dom

使用PHP Simple HTML DOM Parser查找带有类的div

我只是从提到的Parser开始,并以某种方式直接在开始时运行问题.

参考本教程:

http://net.tutsplus.com/tutorials/php/html-parsing-and-screen-scraping-with-the-simple-html-dom-library/

我现在想要在一个源代码中找到一个带有类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)

php parsing dom simple-html-dom

5
推荐指数
2
解决办法
8万
查看次数

结合CURL和简单的html dom

我一直在使用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)

我尽我所能,但它不起作用.我还能尝试什么?

php curl simple-html-dom

5
推荐指数
1
解决办法
7872
查看次数

使用 PHP 进行反向图像抓取

我需要使用 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)

但我不确定如何:

  1. 获取href是否满足条件a.text == 'Large',因为Simple HTML DOM ParserPHPQuery两者都没有this像 jQuery。
  2. 在获取结果页面时,如何触发 mousedown 以获取全尺寸图像 URL,因为这是我在源中看到的: 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 web-scraping

5
推荐指数
1
解决办法
698
查看次数

如何将simple_html_dom对象转换回字符串?

我已经使用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)
  1. 然后我提取的<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()...

  2. 所以我想,因为我正在使用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 dom moodle gettype simple-html-dom

5
推荐指数
1
解决办法
3248
查看次数

使用 Simple HTML Dom 获取所有 HTML 列表元素

目前我正在从事一个项目,该项目要求我解析来自替代网站的一些数据,但我遇到了一些问题(请注意,我对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 php simple-html-dom

5
推荐指数
1
解决办法
1553
查看次数

从下一个标签获取文本

我有一个看起来像这样的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不能这样做,我可以使用其他东西.

php regex simple-html-dom

4
推荐指数
1
解决办法
4128
查看次数

如何检查SimpleHTMLDom元素是否不存在

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 if-statement simple-html-dom

4
推荐指数
1
解决办法
1万
查看次数

如何从远程页面获取iframe内容?

我认为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 iframe jquery parsing simple-html-dom

4
推荐指数
1
解决办法
2万
查看次数

PHP Simple Html Dom获取div的纯文本,但避免使用所有其他标记

我使用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)

php simple-html-dom

4
推荐指数
2
解决办法
1万
查看次数

简单的dom php parse 获取自定义数据属性值

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 simple-html-dom

4
推荐指数
2
解决办法
6269
查看次数

标签 统计

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