首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用PHP简单HTML DOM Parser的find()函数

无法使用PHP简单HTML DOM Parser的find()函数
EN

Stack Overflow用户
提问于 2017-01-05 10:48:09
回答 1查看 1.2K关注 0票数 0

在更新数据库中的几个表之前,我正在尝试抓取一个远程网站并编辑部分结果,然后更新最后文档的echo()‘。

下面是经过编辑的代码片段,以供参考:

代码语言:javascript
复制
<?php

require_once 'backend/connector.php';
require_once 'table_access/simplehtmldom_1_5/simple_html_dom.php';
require_once 'pronunciation1.php';

// retrieve lookup term
if(isset($_POST["lookup_term"])){ $term = trim($_POST["lookup_term"]); }
else { $term = "hombre"; }

$html = file_get_html("http://www.somesite.com/translate/" . rawurlencode($term));
$coll_temp = $html->find('div[id=translate-en]');
$announce = $coll_temp[0]->find('.announcement');
$quickdef = $coll_temp[0]->find('.quickdef');
$meaning = $announce[0] . $quickdef[0];

$html->clear(); // release scraper variable to prevent memory leak issues
unset($html); // release scraper variable to prevent memory leak issues
$meaning = '<?xml version="1.0" encoding="ISO-8859-15"?>' . $meaning;

// process the newly-created DOM
$dom = new DOMDocument;
$dom->loadHTML($meaning);
// various DOM-manipulation code snippets

// extract the quick definition section
foreach ($dom->find('div[class=quickdef]') as $qdd) {
    $qdh1 = $qdd->find('.source')[0]->find('h1.source-text');
    $qdterm = $qdh1[0]->plaintext;
    $qdlang = $qdh1[0]->getAttribute('source-lang');
    add2qd($qdterm, $qdd, $qdlang);
    unset($qdterm);
    unset($qdlang);
    unset($qdh1);
}

$finalmeaning = $dom->saveHTML(); // store processed DOM in $finalmeaning
push2db($term, $finalmeaning); // add processed DOM to database
echo $finalmeaning; // output processed DOM

// release variables
unset($dom);
unset($html);
unset($finalmeaning);
function add2qd($lookupterm, $finalqd, $lang){
    $connect = dbconn(PROJHOST, CONTEXTDB, PEPPYUSR, PEPPYPWD);
    $sql = 'INSERT IGNORE INTO tblquickdef (word, quickdef, lang) VALUES (:word, :quickdef, :lang)';
    $query = $connect->prepare($sql);
    $query->bindParam(':word', $lookupterm);
    $query->bindParam(':quickdef', $finalqd);
    $query->bindParam(':lang', $lang);
    $query->execute();
    $connect = null;
}
function push2db($lookupword, $finalmean) {
    $connect = dbconn(PROJHOST, DICTDB, PEPPYUSR, PEPPYPWD);
    $sql = 'INSERT IGNORE INTO tbldict (word, mean) VALUES (:word, :mean)';
    $query = $connect->prepare($sql);
    $query->bindParam(':word', $lookupword);
    $query->bindParam(':mean', $finalmean);
    $query->execute();
    $connect = null;
}

?>

除了//提取快速定义部分下的 for 循环之外,代码工作得很好。从这个循环内部调用的函数是add2qd(),它接受3个字符串值作为输入。

每次这个循环运行时,PHP都会抛出一个致命错误,因为它认为find()是未定义的。我知道find是PHP简单HTML DOM解析器库中的一个合法函数,因为我在相同的代码中多次使用它,没有任何问题(在//检索查找项部分)。我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-05 10:53:56

但是您没有使用,它只使用标准的DOMDocument,它没有查找方法。

代码语言:javascript
复制
$dom = new DOMDocument;
$dom->loadHTML($meaning);

foreach ($dom->find('div[class=quickdef]') as $qdd) {

http://php.net/manual/en/class.domdocument.php

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41483013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档