Форум сайта python.su
Пытаюсь вытащить список наименований товара:
XPath скопирован из FireBug мозиллы
from urllib.request import urlopen import lxml.html url = 'http://www.pleer.ru/cifrovye-fotoapparaty~157.html' page = urlopen(url).read() doc = lxml.html.document_fromstring(page) for article in doc.xpath('/html/body/div[2]/table/tbody/tr[2]/td[4]/table/tbody/tr/td[2]/div[2]/div/div/div/div/div/div[3]/table/tbody/tr/td/div[2]/p'): print(article)
Отредактировано asphix (Май 22, 2012 16:59:37)
Офлайн
Не знаю, что в вашем XPath не так, возможно tbody не нужен или еще что-то. Но вообще, путями которые выдал Firebug пользоваться нехорошо. Лучше самому анализировать структуру страницы на предмет id'ов и классов и писать XPath относительно их.
Если я правильно понял и вам нужен номер товара (точнее все номера):
'//div[@class="description"]/p[1]'
'//div[@class="description"]/p[3]'
Отредактировано reclosedev (Май 22, 2012 17:31:04)
Офлайн
reclosedev, не всегда есть, к чему привязаться, и не всегда оно стоит результата. При смене разметки все равно все с большой вероятности полетит к черту.
Офлайн
asilyatorДа, бывает: таблица в таблице в таблице… без единого класса, id'a или стиля и текст внутри <br>'ами поделен
не всегда есть, к чему привязаться, и не всегда оно стоит результата.
asilyatorПривязка к id'ам и к классам (в меньшей степени) немного снижает эту вероятность.
При смене разметки все равно все с большой вероятности полетит к черту.
Офлайн
Абсолютно не факт, а вот потрахаться с ним придется больше (а там только скопипастить). За исключением, когда к обьекту явно идет обращение через js (например, json блок со своим уникальным ид).
Офлайн
в том и беда, что айдишников там нет
Офлайн
разобрался с XPath, но остался один вопросик:
есть выражение:
//tr[starts-with(@id, 'pr2cart_') and @class='product_row']/td/div[2][@class='description']/p[2]/span
<span title="3 единицы товара" style="color:red;font-weight:bold;">...</span>
Офлайн
отвечая на свой же вопрос:
string(//tr[starts-with(@id, 'pr2cart_') and @class='product_row']/td/div[2][@class='description']/p[2]/span/@title)
Офлайн
Еще есть вариант воспользоваться методом элементов get(name, default=None) для получения любого атрибута:
el = doc.xpath('//div[@class="description"]/p[2]/span') print el.get('title')
Офлайн
интересный вариант, спасибо!
Офлайн