Вернуться   Программирование для SEO » Программирование » Python
Ответ
 
Опции темы Опции просмотра
  #1  
Старый 21.02.2010, 18:40
Cabal Cabal вне форума
Пользователь
 
Регистрация: 21.08.2009
Сообщений: 35
Cabal на пути к лучшему
По умолчанию По регуляркам подсобите

Пишу регулярку чтобы почекать колличество страниц в выдаче Гугла. Кто не знает там есть два варианта текста "n-ная страница of искомая цифра" и "n-ная страница of about искомая цифра". Написал такую регулярку:
Цитата:
(of|of\sabout) <b>(.+?)</b>
компилирую. pattern.findall(html) возвращает в массиве кортеж:
Цитата:
[('of about', '1,070,000')]
Понятно дело добираться до нужной цифры так result[0][1] далеко не комильфо. У меня метод запроса к гуглу всё это в ещё один массив складывает и получается что до него вообще очень не комфортно лезть. Запоминает он лишний элемент из за того что он в скобках. В PHP есть такой значёк " ?: " для того чтобы парсер не запоминал элементы в скобках если это не надо но в питоне что то не получается так. Надо что бы содержание первых скобок не запоминалось или другое решение какое нибудь, кто что подскажет?
Ответить с цитированием
  #2  
Старый 21.02.2010, 20:24
Cabal Cabal вне форума
Пользователь
 
Регистрация: 21.08.2009
Сообщений: 35
Cabal на пути к лучшему
По умолчанию

Разобрался сам. Значёк "?:" в питоне работает как и в пыхе. Я как то не правильно делал что у меня всё повисало не из за регулярки с этим значком, а по какой то другой причине как переписал по нововой всё заработало.
Если у кого есть регулярка попроще этой для дёрганья количества страниц по запросу в Google
Цитата:
r'(?: of|about) <b>(\d+\S*?)</b>'
было бы любопытно для общего развития сравнить

Последний раз редактировалось Cabal; 21.02.2010 в 20:47.
Ответить с цитированием
  #3  
Старый 03.03.2010, 08:22
Jungle Jungle вне форума
Модератор
 
Регистрация: 13.01.2009
Сообщений: 126
Jungle на пути к лучшему
По умолчанию

Код:
class Google(Stats):

    backlinks_opts = dict(
        url='http://www.google.com/search?ie=UTF-8&q='+_quote('link:')+'%s',
        xpath='//body',
        re=re.compile(r'\d+\s+.\s+\d+[^\d]+(?P<match>[\d\s\xc2\xa0]+)', re.I),
        convert=lambda s: int(_num_only.sub('', s) or 0),
    )
    
    indexed_opts = dict(
        url='http://www.google.com/search?filter=0&ie=UTF-8&q='+_quote('site:')+'%s',
        xpath='//a[contains(@href, "swrnum")]/@href',
        re=re.compile(r'swrnum=(?P<match>\d+)', re.I),
        convert=lambda s: int(_num_only.sub('', s) or 0),
    )
немного кода из моей либы
ищу xpath, а затем регуляркой обрабатываю
Ответить с цитированием
  #4  
Старый 05.03.2010, 14:52
plusplus plusplus вне форума
Пользователь
 
Регистрация: 13.01.2009
Сообщений: 97
plusplus на пути к лучшему
По умолчанию

М, мне бы тож кто подсказал. В квадратных скобках можно указать элементы которые не должны встречаться в результате:
[^>] # всё подходит, кроме символа >
Как указать не один символ, а определенное сочетание символов? Мне нужно выбрать ссылки <a href, но чтобы внутри них не было тега img.
[^(img)] - такой вариант не подходит оказывается.
Ответить с цитированием
  #5  
Старый 01.04.2010, 15:26
kramer kramer вне форума
Новичок
 
Регистрация: 01.04.2010
Адрес: Russia
Сообщений: 1
kramer на пути к лучшему
По умолчанию

Цитата:
Сообщение от plusplus Посмотреть сообщение
М, мне бы тож кто подсказал. В квадратных скобках можно указать элементы которые не должны встречаться в результате:
[^>] # всё подходит, кроме символа >
Как указать не один символ, а определенное сочетание символов? Мне нужно выбрать ссылки <a href, но чтобы внутри них не было тега img.
[^(img)] - такой вариант не подходит оказывается.
Можно использовать различного рода позиционные проверки, в вашем случае негативную: (?!<img), только стоит учесть - это позиционная проверка, т.е. механизм обработки регэкспов проверяет позицию (как ^ и $). Советую прочитать книжку Фридла, многие вопросы по р.в. отпадут.
Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +3, время: 09:36.