|
|
|
| На странице находится поле с постраничной навигацией, я хочу выдернуть со всей страницы только эту часть и конкретно номер последней страницу
часть страницы выглядит так
Страницы: <a href="/browse/M/P1.html">
<b>«</b></a> <a href="/browse/M/P1.html">1</a>
<b>2</b> <a href="/browse/M/P3.html">3</a>
<a href="/browse/M/P4.html">4</a> …
<a href="/browse/M/P26.html">26</a>
<a href="/browse/M/P27.html">27</a>
<a href="/browse/M/P28.html">28</a>
<a href="/browse/M/P29.html">29</a>
<a href="/browse/M/P3.html"><b>»</b></a></td>
</tr>
</table>
</div>
</td>
</tr>
|
в данном случае последняя страница - 29. Дело в том что на странице два поля с постраничной навигацией, поле расположенное внизу уникально тем что в нем есть</table></div>, в общем из всего этого нужно получить только одно число 29 в итоге.
Подскажите пожалуйста, уже несколько часов мучаюсь
получилось только вот это
\d{1,2}(?= (?<=\d{1,2})</a> <a href="/browse/\w/P\d{1,2}.html"><b>»</b></a></td>)
в редакторе регулярных выражений находит нужное число, но если это экспортировать в PHP или Python то выражение не работает:
PHP
выдает Warning: preg_match() [function.preg-match]: Compilation failed: lookbehind assertion is not fixed length at offset 22 in test.php on line 30
<?php
if (preg_match('%\\d{1,2}(?= (?<=\\d{1,2})</a> <a href="/browse/\\w/P\\d{1,2}.html"><b>»</b></a></td>)%', $page)) {
print "found";
} else {
print "not found"
}
?>
|
Python:
выдает raise error, v # invalid expression
sre_constants.error: look-behind requires fixed-width pattern
import urllib
import re
url = "d:/htdocs/A.html"
f=open(url, 'r')
text = f.read()
if re.search(r'\d{1,2}(?= (?<=\d{1,2})</a> <a href="/browse/\w/P\d{1,2}.html"><b>»</b></a></td>)', text):
print "found"
else:
"not found"
|
| |
|
|
|
|
|
|
|
для: Unreal
(09.01.2007 в 23:48)
| | Двойные обратные слеши - это не правильно
<?php
if (preg_match('%\d{1,2}(?= (?<=\d{1,2})</a> <a href="/browse/\w/P\d{1,2}.html"><b>»</b></a></td>)%', $page)) {
print "found";
} else {
print "not found"
}
?>
|
приведите исходный код второй постраничной навигации, а то не очень понятно... | |
|
|
|
|
|
|
|
для: cheops
(10.01.2007 в 00:42)
| | Нашел другое решение :)
Ищу строку "Найдено исполнителей:" рядом с ней цифра, если ее поделить на число элементов на странице то получится количество страниц. Например, найдено исполнителей 719/25=29 страниц
вот регулярное выражение (?!Найдено.исполнителей:.*<b>)(?<=<b>)\d{1,3}(?<!</b>)[^<b>]
небольшая програмка на Python
# -*- coding: windows-1251
import urllib
import re
import array
import time
url = "D:/htdocs/P1.html"
f=open(url, 'r')
text = f.read()
result = re.findall(r"(?!Найдено.исполнителей:.*<b>)(?<=<b>)\d{1,3}(?<!</b>)[^<b>]", text)
# На странице постраничная навигация показывается два раза поэтому мне нужно только первое вхождение
print result[0] | |
|
|
|
|
|
|
|
для: cheops
(10.01.2007 в 00:42)
| | >Двойные обратные слеши - это не правильно
на языке perl - возможно. На языке php - отнюдь. | |
|
|
|