【问题标题】:Finding part of the tag with simple html dom使用简单的 html dom 查找标签的一部分
【发布时间】:2013-10-02 14:00:40
【问题描述】:

你能帮帮我吗? 我试图从这里使用 php simple dome parser 来抓取网站http://simplehtmldom.sourceforge.net/

问题是我需要识别的标签具有相同的开头,但没有相同的结尾。 例如这是结构:

<div id="postmenu_2861574">
   <div id="post_message_2861574"> one posted message </div>
</div>
<div id="postmenu_2861617">
   <div id="post_message_2861617"> another posted message </div>
</div>

所有标签都有相同的开头“post_menu”和“post_message_”,但结尾不同。 是否可以在不知道所有标签结尾的情况下收集所有帖子? 有没有像 sql 一样在搜索短语末尾使用 % 符号的方法? 由于简单的方法不起作用,显示变量 $postmenu 为空。

foreach($html->find('div#postmenu_') as $postmenu)
     $item['message'] = $article->find('div#post_message_', 0)->plaintext;

感谢您的帮助

【问题讨论】:

  • 不,你不能那样做......到目前为止,唯一的方法是@Petur Olsen 建议......除非你给出你的 DOM 的完整结构,否则也许是另一种方法......
  • 感谢您的回答,下次我会知道的;)

标签: php string search simple-html-dom


【解决方案1】:

根据http://www.w3.org/TR/CSS2/selector.html,你问的是不可能的。

我会将所有带有帖子消息的 div 设为同一类,例如class="post_message"。

然后你可以使用这个类找到所有的div:

foreach($html->find('div.post_message') ...

由于您正在抓取网站,因此性能可能不是问题。在这种情况下,您可以简单地找到所有 div 并检查 ID,看看它是否匹配。

foreach($html->find('div') ...
  // retreive ID
  if (0 === strpos($id, 'post_message_')))
    ...

【讨论】:

  • 谢谢,但是首先要更改它们,我需要识别它们,因为有很多不需要的 div,我需要再次首先找到正确的标签。
  • 啊,我误会了。您正在获取一个网站并希望从其中获取数据。在这种情况下,您可以查看是否存在可以利用的数据结构。例如。在您的示例中,您可以执行 find('div div')。这将发现所有嵌套一层深的 div。但我不确定这是否适用于整个文档。或者做 find('div') 并做 startsWith($id, "post_message_")。在这种情况下,这可能是最好的。
  • 感谢 Petur,正如您建议的那样,这件事“如果 (0 === strpos($divs->id, 'post_message_'))”有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-07
  • 2018-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-06
  • 2014-08-14
相关资源
最近更新 更多