Уведомления

Группа в Telegram: @pythonsu

#1 Март 28, 2014 11:07:06

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Как вытаскивать инфу из такого кода?

>>> import lxml.html
>>> 
>>> def func(url):
...     html = lxml.html.parse(url)
...     
...     ndesc = html.xpath('//div[@class = "description_composition"]')[0]
...     nprop1, nprop2 = ndesc.xpath('.//*[@class = "description_content"]')
...     
...     tprop1 = nprop1.xpath('.//text()')
...     tprop2 = nprop2.xpath('.//text()')
...     
...     text1 = ''.join(tprop1).strip()
...     text2 = ''.join(tprop2).strip()
...     
...     return text1, text2
... 
>>> desc, comp = func('http://medini-original.com'
...                   '/ru/product/plate_samanta_a3.html')
>>> 
>>> desc
'Состав: полированный ситец+ костюмный креп трикотаж.\xa0Ткани используемые в данной модели, экологически чистые, и натуральные! (100% хлопок).\xa0Декорировано клеевыми камнями. Потайная змейка. Длина изделия 140 см рост модели на фото 170 см. Размеры:42-44 (M); 46-48 (L); 50-52 (XL).'
>>> comp
'полированный ситец+ костюмный креп трикотаж.'
>>>



Офлайн

#2 Март 28, 2014 21:11:50

ingfa_1981
Зарегистрирован: 2014-01-25
Сообщения: 200
Репутация: +  1  -
Профиль   Адрес электронной почты  

Как вытаскивать инфу из такого кода?

А в этом коде

<div>                            
                                                            <div class="description_content active" data-prop="1">
                                    <p><span>Состав: полированный ситец+ костюмный креп трикотаж.&nbsp;</span><span>Ткани используемые в данной модели, экологически чистые, и натуральные! (100% хлопок).&nbsp;</span><span>Декорировано клеевыми камнями. Потайная змейка. Длина изделия 140 см рост модели на фото 170 см. Размеры:42-44 (M); 46-48 (L); 50-52 (XL).</span></p>                                </div>
                                       
                                                            <div class="description_content" data-prop="2">
                                    полированный ситец+ костюмный креп трикотаж.                                </div>                            
                                                    </div>

Как вы нашли эту часть?

ndesc = html.xpath('//div[@class = "description_composition"]')[0]
...     nprop1, nprop2 = ndesc.xpath('.//*[@class = "description_content"]')

Офлайн

#3 Март 28, 2014 21:53:07

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Как вытаскивать инфу из такого кода?

nprop1, nprop2 = ndesc.xpath('.//*[@class = "description_content" or @class = "description_content active"]')

nprop1, nprop2 = ndesc.xpath('.//*[@class = "description_content" or '
                                  '@class = "description_content active"]')

там можно contains() применить, но я бы пока не заморачивался, пока разных строки две



Отредактировано py.user.next (Март 28, 2014 21:56:59)

Офлайн

#4 Март 28, 2014 22:04:28

ingfa_1981
Зарегистрирован: 2014-01-25
Сообщения: 200
Репутация: +  1  -
Профиль   Адрес электронной почты  

Как вытаскивать инфу из такого кода?

Мне просто не понятно, как вы привязываетесь к строчкам кода html, что бы вытащить текст. Не могли бы рассказать?

Офлайн

#5 Март 28, 2014 22:12:21

ingfa_1981
Зарегистрирован: 2014-01-25
Сообщения: 200
Репутация: +  1  -
Профиль   Адрес электронной почты  

Как вытаскивать инфу из такого кода?

Вот допустим нужно найти Платье “Саманта” А3 на той же странице http://medini-original.com/ru/product/plate_samanta_a3.html.
где это в коде, вернее к чему привязаться что бы вытащить данные?

Офлайн

#6 Март 28, 2014 22:36:32

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Как вытаскивать инфу из такого кода?

ingfa_1981
Вот допустим нужно найти Платье “Саманта” А3 на той же странице
>>> import lxml.html
>>> 
>>> url = 'http://medini-original.com/ru/product/plate_samanta_a3.html'
>>> 
>>> html = lxml.html.parse(url)
>>> name = html.xpath('//div[@class = "name_product"]/text()')[0]
>>> name
'Платье "Саманта" А3'
>>>

1. открываешь исходник страницы, нажимаешь Ctrl + F, находишь “Платье”, оно там в трёх местах
2. смотришь в каком уникальном теге оно находится
<div class="name_product">
3. если тег уникальный (name_product больше нигде нет), то используешь этот атрибут, иначе ищешь уникальный тег, который включает этот тег
4. составляешь путь в xpath (туториал)



Отредактировано py.user.next (Март 28, 2014 22:37:01)

Офлайн

#7 Март 30, 2014 17:26:51

ingfa_1981
Зарегистрирован: 2014-01-25
Сообщения: 200
Репутация: +  1  -
Профиль   Адрес электронной почты  

Как вытаскивать инфу из такого кода?

Интересно получается, неделю сидел и не мог нажать в Chrome кнопку copy xpath, потому что ни знал что ее надо нажимать.
получился вот такой код. А как вытащить ссылку на следующую страничку?

# -*- coding: utf-8 -*-
from grab import Grab
g = Grab()
g.go("http://medini-original.com/ru/product/1432.html")
print (g.doc.select("//div[1]/div/div/section/div[2]/div[2]/div[1]").text())
print (g.doc.select("//div[1]/div/div/section/div[2]/div[2]/div[2]/div[2]/div[2]/div[2]/div[1]/p").text())
print (g.doc.select("//div[1]/div/div/section/div[2]/div[2]/div[2]/div[1]/div[1]").text())
print (g.doc.select("//div[1]/div/div/section/div[3]/div[2]/a").text())

Отредактировано ingfa_1981 (Март 30, 2014 17:30:19)

Офлайн

#8 Март 30, 2014 21:01:27

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Как вытаскивать инфу из такого кода?

ingfa_1981
"//div[1]/div/div/section/div[2]/div[2]/div[2]/div[2]/div[2]/div[2]/div[1]/p"
такое лучше не писать:
во-первых, легко ошибиться и не увидеть ошибку
а во-вторых, страницу могут поменять где-нибудь вверху, из-за этого код сломается и нужно будет его переделывать

поэтому поиск нужно привязывать к локальным участкам, которые будут найдены, даже если страница изменится



Отредактировано py.user.next (Март 30, 2014 21:03:47)

Офлайн

#9 Март 31, 2014 18:11:38

noob_saibot
Зарегистрирован: 2013-09-11
Сообщения: 495
Репутация: +  20  -
Профиль   Отправить e-mail  

Как вытаскивать инфу из такого кода?

# -*- coding: utf-8 -*-
from grab import Grab
g = Grab()
g.go("http://medini-original.com/ru/product/1559.html")
while 1:
    print g.doc.select("//div[@class='name_product']").text()
    for mel in g.doc.select("//div[@class='description_content']/p"):
        print mel.text()
    print (g.doc.select("//div[@class='sum_zakaz']").text())
    try:
        g.go("http://medini-original.com"+str(g.doc.select("//div[@class='blog_next']/a").attr("href")))
    except:
        break

Отредактировано noob_saibot (Март 31, 2014 18:14:08)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version