Форум сайта python.su
0
Задача: Проверять обновление постов в однокласниках исключая промо посты.
Что я не могу: Я не могу понять как в блоке поста проверить присутвие элемента
.//*[@class='feed_label']
g.go('http://ok.ru/innovat',log_file='outtest2.html') time.sleep(1) for elem in g.doc.select(".//*[@class='feed']"): htmlPost = elem.html() #postValue = get_node_text(htmlPost.node(), ".//*[@class='feed_label']") #print postValue #if promoPost == 'DataNotFound': # print 'Не рекламный пост' #else: # print 'Рекламный пост '
Офлайн
857
Notan1310А где там класс feed?g.doc.select(".//*[@class='feed']")
Офлайн
16
>>> from lxml import etree >>> q = etree.fromstring('<xml><hello>a</hello><x><hello>b</hello></x></xml>') >>> q.findall('.//hello') # XPath, recursive. [<Element hello at 414a7c8>, <Element hello at 414a818>]
Отредактировано alexbadaloff (Янв. 24, 2015 10:48:31)
Офлайн
0
А где там класс feed?

py.user.nextЕсли я правильно думаю я просто получаю список блоков(постов) и должен делать проверку на одно значение слово “Промо”. Если его нет то делаю выборку если есть то исключаю этот пост из списка. У меня не получается когда я уже по итераций начинаю работать с блоком еще внутри него проверять значения “Промо” есть или нет.
А где там класс feed?
for elem in g.doc.select(".//*[@class='feed']"): htmlPost = elem.html()
Отредактировано Notan1310 (Янв. 24, 2015 13:08:03)
Офлайн
0
Еще по другому вопрос могу поставить. Как мне сделать htmlPost(нижний кодес) доступным для работы как с
g.doc.select('node').
for elem in g.doc.select(".//*[@class='feed']"): htmlPost = elem.html()
Офлайн
857
Notan1310Вообще, если это lxml, то там есть логическое И. То есть внутри квадратных скобок ставишь and и второе выражение.
Подскажите пожалуйста как можно провоерять значение используяю Итерацию.
>>> import lxml.html >>> >>> doc = lxml.html.fromstring( ... '<a href="text1" class="text2">x</a>' ... '<a href="text1" class="text3">y</a>' ... ) >>> >>> nodes = doc.xpath(r'//a[@href="text1" and @class="text2"]') >>> >>> nodes [<Element a at 0xb73ccdac>] >>> nodes[0].attrib {'class': 'text2', 'href': 'text1'} >>>
>>> import lxml.html >>> >>> doc = lxml.html.fromstring( ... '<a href="text1" class="text2">x</a>' ... '<a href="text1" class="text3">y</a>' ... ) >>> >>> nodes = doc.xpath(r'//a[@href="text1" and @class="text2"]') >>> >>> for node in nodes: ... lst = [] ... lst.extend(node.xpath(r'./text()')) ... lst.extend(node.xpath(r'./@href')) ... lst.extend(node.xpath(r'./@class')) ... print(lst) ... ['x', 'text1', 'text2'] >>>
Notan1310Там ещё есть логическое НЕ. Тоже в квадратных скобках пишешь not перед выражением.
Если его нет то делаю выборку если есть то исключаю этот пост из списка.
Отредактировано py.user.next (Янв. 25, 2015 12:26:50)
Офлайн
0
py.user.next Спасибо. Задачу решил с вашей помощью
Офлайн