PHP Dom XPath-> оценить - PullRequest
       2

PHP Dom XPath-> оценить

1 голос
/ 16 декабря 2011

Быстрый вопрос ко всем вашим профи. Я пытаюсь скрести заголовок темы на этой странице http://forums.moneysavingexpert.com/forumdisplay.php?f=36

Я использую DOMXPath, просматривая исходный код вышеупомянутой страницы, заголовок содержится в следующем коде:

<a href="showthread.php?t=...number representing thread..."
   id="thread_title_...number representing thread..." 
   style="font-weight:bold">TITLE OF THREAD</a>

Я начал с этого кода:

$list3 = $xpath3
  ->evaluate("//a[contains(@style, 'font-weight:bold')]");

Однако существует несколько <a style="font-weight:bold">. Мой вопрос: вы можете объединить contains? Например, содержит @style и @href?

Если так, как вы можете сделать это с помощью вышеупомянутого href, число которого меняется в зависимости от того, какой это поток? Можете ли вы сделать что-то типа [0-9]?

Буду признателен за любую помощь!

Ответы [ 2 ]

1 голос
/ 16 декабря 2011

Используйте следующее выражение, чтобы получить ссылку, в которой href содержит showthread.php?t=2:

//a[contains(@style, 'font-weight:bold') and 
    contains(@href, 'showthread.php?t=2')]

Если вы хотите получить любую из этих ссылок (независимо от числа в t=<n>), используйте следующее выражение:

//a[contains(@style, 'font-weight:bold') and 
    contains(translate(@href, '0123456789', ''), 'showthread.php?t=', )]

Обратите внимание, что вы также можете использовать starts-with, если эти строки всегда появляются в начале href.

0 голосов
/ 16 декабря 2011

Я думаю, что вы можете делать комбинации, но в вашем случае, я думаю, было бы проще получить 3-е число каждого tr и получить заголовок внутри. И снова попробуйте не полагаться на стиль, он не очень семантический.

Вам нужно выучить xpath, и вы можете изучать его, например, в w3schools . Также, если вы используете firebug, вы можете щелкнуть правой кнопкой мыши по любому элементу на вкладке html и получить его xpath. Вот что я получу за первый заголовок: //*[@id="td_threadtitle_3499047"] ... не очень хорошо.

Для таблицы потоков я получаю это: //*[@id="threadslist"] ... это лучше, нет номера.

Теперь давайте получим каждый третий тд: //*[@id="threadslist"]//td[3]

А теперь вторая ссылка, которая должна соответствовать названию: //*[@id="threadslist"]//td[3]/div/a[2]. Возьми? Может быть, я ошибаюсь, но я надеюсь, что у вас есть идея ...

Опора на позицию тоже не очень семантическая, но у вас, похоже, нет особого выбора в этом вопросе ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...