标签: simple-html-dom

jsoup第二个元素而不是first()

我已经翻译了PHP Simple HTML DOM查询:

$article->find('td[id$=tdDescription] div a', 1)->plaintext;
Run Code Online (Sandbox Code Playgroud)

jsoup查询:

resultRow.select("td[id$=tdDescription] > div > a").first().text());
Run Code Online (Sandbox Code Playgroud)

你可以看到我正在接受PHP的第二个(1)结果,目前在jsoup中使用.first()我正在访问第一个结果(0)但是我也想访问第二个结果(1),怎么会我这样做?

php java simple-html-dom jsoup

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

简单的HTML Dom - 使用load_file时出现致命错误

我正在尝试解析一个HTML文件,该文件具有可怕的(相信我,它是)HTML结构,由于这个和我缺乏知识,我无法编写自己的解析器.后来我尝试使用Simple HTML Dom解析器,因为很多人(也在SO上)推荐它.

我需要simple_html_dom.php,然后创建了对象.它们似乎工作,require()函数返回"1"和var_dump() - 对象返回一个对象.

在此之后,我尝试加载URL,就像在手册中一样,但是无论我尝试了什么URL,我都会遇到致命的错误.错误如下:

Fatal error: Call to undefined function mb_detect_encoding() in 
             /home/fema/web/subdomain/devel/www_root/parser/
             simplehtmldom_1_5/simple_html_dom.php on line 988
Run Code Online (Sandbox Code Playgroud)

我检查了988号线上的内容,它是以下内容:

// Have php try to detect the encoding from the text given to us.
        $charset = mb_detect_encoding($this->root->plaintext . "ascii", 
                   $encoding_list = array( "UTF-8", "CP1252" ) );
Run Code Online (Sandbox Code Playgroud)

我知道这是关于字符编码的,但这就是全部.我还没有发现谷歌或SO上的任何相关信息.

我的整个代码是(占位符网址):

<?php

require('simplehtmldom_1_5/simple_html_dom.php');

// Create a DOM object
$dom = new simple_html_dom();

$dom->load_file('http://www.google.com/');

?>
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我该怎么办?或者在发生类似这样的事情时给出某种建议.

提前致谢.

php html-parsing fatal-error simple-html-dom

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

PHP简单HTML DOM - 在<td>标签内获取文本

所以我有这个.html文件,我必须分析.在那个文件中我有这样的行:

<tr>
    <td colspan=1 rowspan=1 bgcolor=#ffffff align=left valign=top>
        <font size=1 face="Tahoma" color=#000000>
            <nobr>
                 240,0000
            </nobr>
        </font>
    </td>

     <td colspan=1 rowspan=1 bgcolor=#ffffff align=left valign=top>
        <font size=1 face="Tahoma" color=#000000>
            <nobr>
                 340,0000
            </nobr>
        </font>
    </td>
</tr>
Run Code Online (Sandbox Code Playgroud)

我需要得到的是240,0000,340,0000等等.我尝试过这样的事情:

// Create DOM from URL or file
$html = file_get_html('File.html');

foreach($html->find('td') as $element) 
   echo $element->text. '<br>';
Run Code Online (Sandbox Code Playgroud)

这样做我没有得到我想要的文本.

如何引用标签内的文字?所以我可以得到价值观.

php simple-html-dom

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

PHP中的<tbody>故障简单的HTML DOM解析器

我正在使用PHP Simple HTML DOM Parser来抓取网店的一些数据(也运行XAMPP 1.7.2和PHP5.3.0),而且我遇到了<tbody>tag的问题.该表的结构是必要的(细节并不是那么重要):

<table>
  <thead>
    <!--text here-->
  </thead>
  <tbody>
    <!--text here-->
  </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

现在,我正在尝试<tbody>使用代码进入该部分:

$element = $html->find('tbody',0)->innertext;
Run Code Online (Sandbox Code Playgroud)

它不会抛出任何错误,它只是在我试图回应时没有打印出来.我测试过的其他元素的代码,<thead>,<table>,甚至有点像<span class="price">,他们都做工精细(ofcourse,删除" 0"失败的代码).他们都给出了正确的部分.Outertext同上.但一切都失败了<tbody>.

现在,我已经浏览了Parser,但我不确定我是否能解决它.我注意到<thead>甚至没有提到,但它工作正常.

我想我可以尝试做儿童导航,但这似乎也有问题.我刚试过跑:

$el = $html->find('table',0);
$el2 = $el->children(2);
echo $el2->outertext;
Run Code Online (Sandbox Code Playgroud)

而且没有骰子.试图替换childrenfirst_child和2 1,和仍然没有骰子.有趣的是,如果我尝试->find而不是children,它的效果非常好.

我非常有信心我可以找到一个解决方案,但这种行为似乎很奇怪,可以在这里发布.我好奇的心灵很高兴得到所有的帮助.

php simple-html-dom

7
推荐指数
2
解决办法
6033
查看次数

在PHP中删除表上的rowspan

有这个表我想加载到一个多维数组.问题是由于表具有rowspan值,每行可能具有不同的单元格数.所以我必须删除rowspan并添加空值而不是这些单元格.

这是我有的表(原始文件)(有5k行.)原始表

我必须像这样添加这个表,以便有一个合适的数组.在此输入图像描述

删除第一行的colspan值很容易.但是在当前方法中删除rowspans有时会导致数组中的额外值.

我目前的PHP文件:

<?php
ini_set('display_errors', true);
ini_set('mbstring.internal_encoding','UTF-8');
ini_set("memory_limit", "1024M"); 
ini_set('max_execution_time', 300);
include('simple_html_dom.php');

// Create a DOM object
$html = new simple_html_dom();

$html->load_file('stok.html');

$table = array();
$kac = array();

foreach($html->find('tr') as $row) {
        $satir = array();
        $j = 0;
        foreach($row->find('td') as $element) {
            if($kac[$j]['deger']>0){
                $satir[]='';
                $kac[$j]['deger']=$kac[$j]['deger']-1;
                $j++;
                while($kac[$j]['deger']>0){
                    $satir[]='';
                    $kac[$j]['deger']=$kac[$j]['deger']-1;
                    $j++;
                }
            }else{
                $j++;
                if(isset($element->rowspan)){
                    $kac[$j]['deger']=($element->rowspan)-1;
                }
                $satir[] = str_replace('&nbsp;', '', strip_tags($element->innertext));
            }

            if(isset($element->colspan)){
                $sayi=($element->colspan)-1;
                for($i=1;$i<=$sayi;$i++){
                    $satir[] = '';
                }
            }
        }
        $table[] = $satir;
}

echo '<pre>';
print_r($table); …
Run Code Online (Sandbox Code Playgroud)

php html-table html-parsing simple-html-dom

7
推荐指数
1
解决办法
1558
查看次数

PHP致命错误:在非对象上调用成员函数find()但是我的函数工作

我在我的代码的第71行收到此错误,但是这行的功能正确执行,它完成了我期望它做的事情.

但是,我注意到我的错误日志中充满了这些行:

[2013年12月14日14:54:02 UTC] PHP致命错误:在第71行的/home/sportve/public_html/open_event_common.php中调用非对象的成员函数find()

我检查了什么:

simple_html_dom_parser 已包含,并且第71行打算执行的此功能正在运行.

这是我的代码的第71行:

$content->find('a.openevent', 0)->innertext = '';
Run Code Online (Sandbox Code Playgroud)

所以它的错误导致这个错误出现在我的错误日志文件中?

编辑:这是完整的代码:

<?php       
    $url = "static/" . $cat_map[$cat]['url'];
    $html = file_get_html($url);
    $content = $html->find('div#event-pane > div#e' . $event_id, 0);
    $content->find('a.openevent', 0)->innertext = '';
    $content->find('h3.lshtitle', 0)->onclick = '';
    $content->find('h3.lshtitle', 0)->tag = 'div';
    $content->find('div.lshtitle', 0)->class = 'ttl';                
?>
Run Code Online (Sandbox Code Playgroud)

php simple-html-dom

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

如何使用代理运行本地PHP简单HTML DOM解析器?

我在MAMP本地有一个PHP Simple HTML DOM Parser,因为我位于日本,它可以提取信息并与日本版网站很好地配合使用.但是,我想从该网站的英国版本中提取信息.最简单的方法是什么?

我从文档中尝试了以下内容,但它不起作用.

$context = array('http' => array('proxy' => '212.82.126.32:80','request_fulluri' => true,),);
$stream = stream_context_create($context);

$html = file_get_html('http://www.supremenewyork.com/shop/new', false, $stream);
Run Code Online (Sandbox Code Playgroud)

由于网站启用了安全模式,我还尝试了修改后的curl版本.这不起作用.

function curl_exec_follow(/*resource*/ $ch, /*int*/ &$maxredirect = null) { 
    $mr = $maxredirect === null ? 5 : intval($maxredirect); 
    if (ini_get('open_basedir') == '' && ini_get('safe_mode' == 'Off')) { 
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $mr > 0); 
        curl_setopt($ch, CURLOPT_MAXREDIRS, $mr); 
    } else { 
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); 
        if ($mr > 0) { 
            $newurl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); 

            $rch = curl_copy_handle($ch); 
            curl_setopt($rch, CURLOPT_HEADER, true); 
            curl_setopt($rch, …
Run Code Online (Sandbox Code Playgroud)

php proxy curl simple-html-dom proxylocal

7
推荐指数
1
解决办法
1546
查看次数

警告:file_get_contents:无法打开流:已达到重定向限制,正在中止

我在这个网站上阅读了20多个相关问题,在谷歌搜索但没有用.我是PHP的新手,我正在使用PHP Simple HTML DOM Parser来获取URL.虽然此脚本适用于本地测试页,但它不适用于我需要脚本的URL.

以下是我为此编写的代码,遵循PHP Simple DOM解析器库附带的示例文件:

<?php

include('simple_html_dom.php');

$html = file_get_html('http://www.farmersagent.com/Results.aspx?isa=1&name=A&csz=AL');

foreach($html->find('li.name ul#generalListing') as $e)
echo $e->plaintext;  

?>
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误消息:

Warning: file_get_contents(http://www.farmersagent.com/Results.aspx?isa=1&amp;name=A&amp;csz=AL) [function.file-get-contents]: failed to open stream: Redirection limit reached, aborting in /home/content/html/website.in/test/simple_html_dom.php on line 70
Run Code Online (Sandbox Code Playgroud)

请指导我应该做些什么来使它工作.我是新人,所以请提出一个简单的方法.在阅读本网站上的其他问题及其答案时,我尝试使用cURL方法创建句柄,但是我没能使它工作.我尝试的cURL方法不断返回"资源"或"对象".我不知道如何将它传递给Simple HTML DOM Parser以使$ html-> find()正常工作.

请帮忙!谢谢!

php redirect curl dom simple-html-dom

6
推荐指数
3
解决办法
2万
查看次数

如何在使用简单的 HTML Dom 解析器解析之前登录 Web 表单网站?

这是我想要完成的:

我需要从这个网站抓取产品数据,但是当你登录时价格是不同的。因此,我需要提交这个登录表单(通过 php),然后使用Simple HTML DOM Parser来抓取产品数据。

我发现了以下类似的帖子:

但是,没有任何答案允许我在登录以下站点时登录并继续抓取:https : //www.bestlinknetware.com/Account/LogOn

我试过的

尝试 #1

$data = http_build_query(array(
          "UserName" => "ourValidUsername",
          "Password" => "ourValidPassword"
        ));

send_message("<p>" . $data . "</p>");

$request = array(
  "http" => array(
    "header" => "Content-Type: application/x-www-form-urlencoded\r\n".
                "Content-Length: " . strlen($data) . "\r\n". …
Run Code Online (Sandbox Code Playgroud)

php curl simple-html-dom

6
推荐指数
1
解决办法
2042
查看次数

无法从网页上获取产品名称

我在php中编写了一个脚本,用于搜索title位于网页右上角的产品.该title是可见的Gucci.

当我执行下面的脚本时,它给了我一个错误Notice: Trying to get property 'plaintext' of non-object in C:\xampp\htdocs\runcode\testfile.php on line 16.

我怎样才能Gucci从该网页获得该名称?

链接到网址

我到目前为止写的:

<?php
include "simple_html_dom.php";
$link = "https://www.farfetch.com//bd/shopping/men/gucci-rhyton-web-print-leather-sneaker-item-12964878.aspx"; 

function get_content($url)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('User-Agent: Mozilla/5.0',));
        curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $htmlContent = curl_exec($ch);
        curl_close($ch);
        $dom = new simple_html_dom();
        $dom->load($htmlContent);
        $itemTitle = $dom->find('#bannerComponents-Container [itemprop="name"]', 0)->plaintext;
        echo "{$itemTitle}";
    }
get_content($link);
?>
Run Code Online (Sandbox Code Playgroud)

顺便说一下,我在剧本中使用的选择器完美无瑕.

为了清除这种混淆,我从页面源复制了一大块html元素,既没有动态生成也没有javascript加密,所以我没有找到任何理由让curl无法处理:

<div class="cdb2b6" id="bannerComponents-Container">
    <p class="_41db0e …
Run Code Online (Sandbox Code Playgroud)

php curl simple-html-dom web-scraping

6
推荐指数
1
解决办法
350
查看次数