PHP SimpleHtmlDom xpath

PHP SimpleHtmlDom xpath,php,xpath,simple-html-dom,Php,Xpath,Simple Html Dom,我正在尝试获取我正在解析的网页中节点的内容。这是我的密码: include('simplehtmldom_1_5/simple_html_dom.php'); // get DOM from URL or file $feedUrl = "http://www.yellowpages.com/md/cpa-tax?menu_search=false&page=1&refinements%5Bfacet_clicked%5D=HeadingText&refinements%

我正在尝试获取我正在解析的网页中节点的内容。这是我的密码:

include('simplehtmldom_1_5/simple_html_dom.php');
// get DOM from URL or file
$feedUrl = "http://www.yellowpages.com/md/cpa-tax?menu_search=false&page=1&refinements%5Bfacet_clicked%5D=HeadingText&refinements%5Bheadingtext%5D%5B%5D=Accountants-Certified+Public&refinements%5Bheadingtext%5D%5B%5D=Tax+Return+Preparation&refinements%5Bheadingtext%5D%5B%5D=Tax+Return+Preparation-Business";
$html = file_get_html($feedUrl);
$xpath = "/html/body/div[5]/div[1]/div[1]/div[1]/div[5]/div[3]/div[1]/div[1]/div[1]/div[1]/a[1]/div[1]/div[1]/div[3]/div[1]/div[2]/h3[1]/div[1]/a[1]";
foreach($html->find($xpath) as $e) 
    echo $e->title . '<br>';
include('simplehtmldom_1_5/simple_html_dom.php');
//从URL或文件获取DOM
$feedUrl=”http://www.yellowpages.com/md/cpa-tax?menu_search=false&page=1&refinements%5Bfacet_clicked%5D=HeadingText&refinements%5Bheadingtext%5D%5B%5D=Accountants-认证+公开和精炼%5B标题文本%5D%5B%5D=税收+回报+准备和精炼%5B标题文本%5D%5B%5D=税收+回报+准备业务”;
$html=file\u get\u html($feedUrl);
$xpath=“/html/body/div[5]/div[1]/div[1]/div[1]/div[3]/div[1]/div[1]/div[1]/a[1]/div[1]/div[1]/div[3]/div[1]/div[2]/h3[1]/div[1]/div[1]/a[1]”;
foreach($html->find($xpath)作为$e)
echo$e->title
';
在本例中,我试图从网页中获取名称“税务体验CPA,Inc”。问题是find($xpath)返回的数组总是空的。当我打开GoogleChrome并用xpath搜索节点时,我能够准确地找到我想要的节点。但这在我的代码中不起作用。我使用的路径肯定有问题,但我不知道它是什么。我找了又找,但我没能找到我做错了什么。
请提供帮助。

该网站有许多带有ID和类的节点,请使用它们创建一个更短更简单的xpath表达式来检索所需的内容

以下是适用于您的工作代码:

// includes Simple HTML DOM Parser
include "simple_html_dom.php";

$feedUrl = "http://www.yellowpages.com/md/cpa-tax?menu_search=false&page=1&refinements%5Bfacet_clicked%5D=HeadingText&refinements%5Bheadingtext%5D%5B%5D=Accountants-Certified+Public&refinements%5Bheadingtext%5D%5B%5D=Tax+Return+Preparation&refinements%5Bheadingtext%5D%5B%5D=Tax+Return+Preparation-Business";

//Create a DOM object
$html = new simple_html_dom();
// Load HTML from a string
$html->load_file($feedUrl);

// Find all anchors
$anchors = $html->find("//div[@class='srp-business-name']/a");

// Display all titles
foreach($anchors as $a) 
    echo $a->title . '<br>';

编辑: 这里有一个修改过的代码,从每个“元素/部门”中获取标题和电话号码

请注意,
find(“…”,$index)
返回由
$index
指定的一个元素(从0开始的第n个元素),如果未设置
$index
,则返回一个元素数组

$feedUrl = "http://www.yellowpages.com/md/cpa-tax?menu_search=false&page=1&refinements%5Bfacet_clicked%5D=HeadingText&refinements%5Bheadingtext%5D%5B%5D=Accountants-Certified+Public&refinements%5Bheadingtext%5D%5B%5D=Tax+Return+Preparation&refinements%5Bheadingtext%5D%5B%5D=Tax+Return+Preparation-Business";

//Create a DOM object
$html = new simple_html_dom();
// Load HTML from a string
$html->load_file($feedUrl);

// Find all elements
$divs = $html->find('div.business-container-inner');

// loop through all elements and display the useful parts
foreach($divs as $div) {
    $title = $div->find('div.srp-business-name a', 0)->title;

    $phone = $div->find('span.business-phone', 0)->plaintext;

    echo $title ." - ". $phone . "<br>";
}

// Clear DOM object
$html->clear();
unset($html);
$feedUrl=”http://www.yellowpages.com/md/cpa-tax?menu_search=false&page=1&refinements%5Bfacet_clicked%5D=HeadingText&refinements%5Bheadingtext%5D%5B%5D=Accountants-认证+公开和精炼%5B标题文本%5D%5B%5D=税收+回报+准备和精炼%5B标题文本%5D%5B%5D=税收+回报+准备业务”;
//创建DOM对象
$html=新的简单html\U dom();
//从字符串加载HTML
$html->load_文件($feedUrl);
//查找所有元素
$divs=$html->find('div.business-container-inner');
//循环浏览所有元素并显示有用的部分
foreach($div作为$div){
$title=$div->find('div.srp-business-name a',0)->title;
$phone=$div->find('span.business phone',0)->明文;
echo$title.“-”$phone.“
”; } //清除DOM对象 $html->clear(); 未结算($html);

我想,你应该试试这个

include('simplehtmldom_1_5/simple_html_dom.php');

// get DOM from URL or file
$feedUrl = "http://www.yellowpages.com/md/cpa-tax?menu_search=false&page=1&refinements%5Bfacet_clicked%5D=HeadingText&refinements%5Bheadingtext%5D%5B%5D=Accountants-Certified+Public&refinements%5Bheadingtext%5D%5B%5D=Tax+Return+Preparation&refinements%5Bheadingtext%5D%5B%5D=Tax+Return+Preparation-Business";

$html = new simple_html_dom();
$html->load_file($feedUrl);
$xpath = ".srp-business-name a";
foreach($html->find($xpath) as $e) 
    echo $e->title . '<br>';
include('simplehtmldom_1_5/simple_html_dom.php');
//从URL或文件获取DOM
$feedUrl=”http://www.yellowpages.com/md/cpa-tax?menu_search=false&page=1&refinements%5Bfacet_clicked%5D=HeadingText&refinements%5Bheadingtext%5D%5B%5D=Accountants-认证+公开和精炼%5B标题文本%5D%5B%5D=税收+回报+准备和精炼%5B标题文本%5D%5B%5D=税收+回报+准备业务”;
$html=新的简单html\U dom();
$html->load_文件($feedUrl);
$xpath=“.srp业务名称a”;
foreach($html->find($xpath)作为$e)
echo$e->title
';
查找xpath的最佳方法是firefox firebug。如果看不到确切的html dom,就没有办法提供帮助。我在我的原始帖子中包含了带有html dom的网页。是的,对不起,我评论得太快了,然后意识到。。现在检查一下,没问题。谢谢我安装了firebug并使用firebug查找xpath。路径似乎与我的路径相同(/html/body/div[5]/div/div/div/div[5]/div[3]/div/div/div/a/div/div/div[3]/div/div[2]/h3/div/a),只是我将[1]添加到了我的第一个子div、a和h3元素中。我在没有[1]的情况下尝试过,这也不起作用。使用firebug查找路径比我最初做的要容易得多(手动查找路径)。添加[1]时,是否添加了
,0
,例如:
$html->find(“/html/body/div[1]/p[1]”,0)(仅为示例)。此外,出于测试目的,为了简单性和/或可读性,可以删除
$html->find()
周围的foreach循环,然后打印或var\u转储它。如果我想在同一网页上找到每个企业的相应电话号码,我如何选择企业名称,然后选择企业各自的电话号码?我可以选择父级的子电话号码元素和父级的name元素吗?那个密码会是什么样子?@JohnS,答案更新了。。。请随意发布一个新问题(如果你有)以避免这个问题太多:)@JohnS,很高兴我帮了你。。。别忘了删除其他重复的问题:-)
include('simplehtmldom_1_5/simple_html_dom.php');

// get DOM from URL or file
$feedUrl = "http://www.yellowpages.com/md/cpa-tax?menu_search=false&page=1&refinements%5Bfacet_clicked%5D=HeadingText&refinements%5Bheadingtext%5D%5B%5D=Accountants-Certified+Public&refinements%5Bheadingtext%5D%5B%5D=Tax+Return+Preparation&refinements%5Bheadingtext%5D%5B%5D=Tax+Return+Preparation-Business";

$html = new simple_html_dom();
$html->load_file($feedUrl);
$xpath = ".srp-business-name a";
foreach($html->find($xpath) as $e) 
    echo $e->title . '<br>';