Grab: различия между версиями

Содержимое удалено Содержимое добавлено
м <source> -> <syntaxhighlight> (phab:T237267)
 
Строка 34:
 
= Примеры =
<sourcesyntaxhighlight lang="python">
from grab import Grab
g = Grab(log_file='out.html')
g.go('yandex.ru')
</syntaxhighlight>
</source>
 
Разбор программы
Строка 48:
 
== Поиск на странице ==
<sourcesyntaxhighlight lang="python">
from grab import Grab
g = Grab(log_file='out.html')
g.go('yandex.ru')
g.search(u'яндекс')
</syntaxhighlight>
</source>
 
Если текст будет найден, то ответ будет True.
 
== Получаем текст ==
<sourcesyntaxhighlight lang="python">
from grab import Grab
g = Grab(log_file='out.html')
g.go('yandex.ru')
print g.xpath_text('//*')
</syntaxhighlight>
</source>
 
В результате вы получите весь текст со страницы Yandex.<br>
<sourcesyntaxhighlight lang="python">
print g.xpath_text('//title')
</syntaxhighlight>
</source>
 
Получите title страницы.
Строка 77:
XPath расшифровывается как XML Path Language.
 
<sourcesyntaxhighlight lang="python">
print g.xpath_text('//*')
</syntaxhighlight>
</source>
 
Звёздочка означает импортировать весь текст.
 
<sourcesyntaxhighlight lang="python">
print g.xpath_text('//div')
</sourcesyntaxhighlight>
 
После двух слешей, вы можете указать из какого конкретно элемента импортировать. Если элемент пуст, то появится ошибка. Это не должно вас пугать, это не значит, что вы неправильно прописали синтаксис, это значит, что просто элемент пуст. Также еще важный момент xPath действует интеллектуально, он ищет элемент по всей странице. Найдёт даже если он в конце вебстраницы.
Вы можете конкретизировать элемент. Эта та самая часть, которая путает многих начинающих.
 
<sourcesyntaxhighlight lang="python">
print g.xpath_text('//h1')
print g.xpath_text('//h3')
Строка 96:
print g.xpath_text('//div[@id="post_140164"]')
print g.xpath_text('//a[@class="post_title"]')
</syntaxhighlight>
</source>
 
После двух слешей вы указываете сам элемент, ухо указывает на атрибут элемента. Например, в html коде написано так:
 
<sourcesyntaxhighlight lang="python">
<div id="post_115825">
</syntaxhighlight>
</source>
 
А в Грабе следовательно надо написать так:
 
<sourcesyntaxhighlight lang="python">
print g.xpath_text('//div[@id="post_115825"]')
</syntaxhighlight>
</source>
 
Если мы имеем дело с линком, значит вместо div пишем a. Если он имеет какой-то класс, то конкретизируем.
 
<sourcesyntaxhighlight lang="python">
print g.xpath_text('//a[@class="post_title"]')
</syntaxhighlight>
</source>
 
Значительную помощь нам оказывает [[w:Firebug|Firebug]] или встроенный модуль анализа элементов в браузерах.
Строка 121:
Если приведённый пример не сработает, это значит, что grab не может найти класс линка. Они часто меняются. Чтобы узнать новый класс, надо поставить расширение для браузера firebug. Правой клавишей становитесь на линк и выбираете Inspect element with Firebug.
 
<sourcesyntaxhighlight lang="python">
from grab import Grab
import logging
Строка 128:
g.go('python.org')
print g.xpath('//a[@class="reference external"]').get('href')
</syntaxhighlight>
</source>
 
Мы получим первый линк из класса reference external. <code>>>> /psf/license/</code><br>
Строка 136:
Допустим у вас есть уже несколько сохранённых веб-страниц, вам нужно их распарсить.
 
<sourcesyntaxhighlight lang="python">
data = open('my-file.html').read()
g = Grab(data)
</syntaxhighlight>
</source>
 
== Сообщения об ошибках ==