Уведомления

Группа в Telegram: @pythonsu

#1 Июль 13, 2012 19:02:20

paraman
Зарегистрирован: 2012-07-10
Сообщения: 170
Репутация: +  1  -
Профиль   Отправить e-mail  

Используя Grab вытащить href

У меня есть html документ, в котором есть есть интересующий меня кусок:

<a id= href=" 106097682" >
        <span class="is-juice" title="juice">juice</span>
            Orange / Apple 3.7
            </a>
1) Как можно вытащить из этого куска href?
Пробовал так, но вылетает ошибка grab.error.DataNotFound: Xpath not found::
from grab import Grab
html2 = open('index.html', ‘r’)
html = html2.read()
g1 = Grab(html)
g1.xpath('//a/@href') #странно, но после кода //a съедает contains(./text(), “Orange / Apple 3.7”) в скобках

2)И второй вопрос, если есть переменная j = 3.7, можно ли как-то вытащить href, только по записи из переменной j?

Огромное спасибо, что уделяете моим вопросам своё время.

Отредактировано paraman (Июль 13, 2012 21:08:33)

Офлайн

#2 Июль 13, 2012 21:37:20

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Используя Grab вытащить href

Правильный XPath:

'//a[contains(., "Orange / Apple 3.7")]/@href'

Про j = 3.7 не совсем понял. В lxml есть поддержка переменных, но не внутри строки:
doc = lxml.html.fromstring(html)
print doc.xpath('//a[contains(., $text)]/@href', text='Orange / Apple 3.7')
Поддерживает ли это Grab, не знаю.

Офлайн

#3 Июль 13, 2012 22:21:06

paraman
Зарегистрирован: 2012-07-10
Сообщения: 170
Репутация: +  1  -
Профиль   Отправить e-mail  

Используя Grab вытащить href

Спасибо.
На тему j = 3.7

print doc.xpath('//a[contains(., $text)]/@href', text='Orange / Apple ',j)
- вот так сработает?

Отредактировано paraman (Июль 13, 2012 22:22:06)

Офлайн

#4 Июль 13, 2012 22:26:20

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Используя Grab вытащить href

paraman
Спасибо.
На тему j = 3.7
print doc.xpath('//a[contains(., $text)]/@href', text='Orange / Apple ',j)
- вот так сработает?
Так нет.

Вот так должно:
doc.xpath('//a[contains(., $text)]/@href', text='Orange / Apple %s' % j)

Или вообще не без $переменных:
doc.xpath('//a[contains(., "Orange / Apple %s")]/@href' % j)

Офлайн

#5 Июль 13, 2012 22:34:45

paraman
Зарегистрирован: 2012-07-10
Сообщения: 170
Репутация: +  1  -
Профиль   Отправить e-mail  

Используя Grab вытащить href

Столкнулся с тем, что в коде есть дубликат:

<a id=“106097234” href=“106097234”>
<span class=“is-juice” title=“juice”>juice</span>
Orange / Apple 3.7
</a>

<a tabindex=“1” href=“#toggle-content”>
<em class=“market-title”
>Orange / Apple 3.7</em>
</a>


И в выборку попадает #toggle-content.

p.s. Проблему решил

Отредактировано paraman (Июль 13, 2012 22:51:03)

Офлайн

#6 Июль 13, 2012 22:38:17

paraman
Зарегистрирован: 2012-07-10
Сообщения: 170
Репутация: +  1  -
Профиль   Отправить e-mail  

Используя Grab вытащить href

reclosedev
paraman
Спасибо.
На тему j = 3.7
print doc.xpath('//a[contains(., $text)]/@href', text='Orange / Apple ',j)
- вот так сработает?
Так нет.

Вот так должно:
doc.xpath('//a[contains(., $text)]/@href', text='Orange / Apple %s' % j)

Или вообще не без $переменных:
doc.xpath('//a[contains(., "Orange / Apple %s")]/@href' % j)

Сработало

Отредактировано paraman (Июль 13, 2012 22:40:50)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version