Найти - Пользователи
Полная версия: Как вытаскивать инфу из такого кода?
Начало » Python для новичков » Как вытаскивать инфу из такого кода?
1 2
py.user.next
>>> 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
'полированный ситец+ костюмный креп трикотаж.'
>>>
ingfa_1981
А в этом коде

<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"]')
py.user.next
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() применить, но я бы пока не заморачивался, пока разных строки две

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

py.user.next
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 (туториал)
ingfa_1981
Интересно получается, неделю сидел и не мог нажать в 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())

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

поэтому поиск нужно привязывать к локальным участкам, которые будут найдены, даже если страница изменится
noob_saibot
# -*- 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
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB