fbpx

Lxml получить первый элемент набора

294 просмотра
0
0 Комментариев

помогите пожалуйста исправить код

парсер получает html странички и пытается найти элемент с классом ‘pagination’. проблема в том, что на страничке есть 2 элемента с таким классом. мне нужно вывести на экран только первый

я решил проблему при помощи некрасивой конструкции ‘#2’, но уверен, что существует более лаконичный способ

import pprint
import requests
import lxml.html
import lxml.cssselect
 
def get_doc(url, post=''):
    try:
        req = requests.post(url, params=post)
    except Exception as exc:
        print('Error open url.', exc)
    else:
        docHtml = req.text
        docObj = lxml.html.document_fromstring(docHtml)
        return docObj, docHtml
 
def get_list_search_pages(docObj):
    paginationExist = docObj.cssselect('div.pagination')
    #1
    for elem in paginationExist:
        print(elem.tag)
 
    print('------------------------')
 
    #2
    for elem in paginationExist:
        print(elem.tag)
        break
 
if __name__ == "__main__":
    url = 'http://forum.saransk.ru/index.php?app=core&module=search&section=search&do=search&fromsearch=1'
    post = {
            'search_app':'forums',
            'search_term':'',
            'search_app':'forums',
            'search_content':'titles',
            'search_tags':'',
            'search_author':'sergey kalinin',
            'search_date_start':'',
            'search_date_end':'',
            'search_app_filters[core][sortKey]':'date',
            'search_app_filters[core][sortDir]':'0',
            'search_app_filters[members][searchInKey]':'members',
            'search_app_filters[members][members][sortKey]':'date',
            'search_app_filters[members][members][sortDir]':'0',
            'search_app_filters[members][comments][sortKey]':'date',
            'search_app_filters[members][comments][sortDir]':'0',
            'search_app_filters[forums][noPreview]':'1',
            'search_app_filters[forums][pCount]':'',
            'search_app_filters[forums][pViews]':'',
            'search_app_filters[forums][sortKey]':'date',
            'search_app_filters[forums][sortDir]':'0',
            'search_app_filters[calendar][sortKey]':'date',
            'search_app_filters[calendar][sortDir]':'0',
            'search_app_filters[blog][searchInKey]':'entries',
            'search_app_filters[blog][entries][sortKey]':'date',
            'search_app_filters[blog][entries][sortDir]':'0',
            'search_app_filters[blog][comments][sortKey]':'date',
            'search_app_filters[blog][comments][sortDir]':'0',
            'search_app_filters[gallery][searchInKey]':'images',
            'search_app_filters[gallery][images][sortKey]':'date',
            'search_app_filters[gallery][images][sortDir]':'0',
            'search_app_filters[gallery][comments][sortKey]':'date',
            'search_app_filters[gallery][comments][sortDir]':'0',
            'search_app_filters[gallery][albums][sortKey]':'date',
            'search_app_filters[gallery][albums][sortDir]':'0',
            'submit':'Найти'
    }
 
    #получаем главную страницу с результатами поиска
    docObj, docHtml = get_doc(url, post)
    print(docHtml)
 
    #получаем все страницы с результатами поиска
    get_list_search_pages(docObj)
 
    print('full end')

мне принципиально важно использовать именно lxml.cssselect


Добавить комментарий

1 Ответы

Python Опубликовано 25.06.2019
0

Если я вас правильно понял, то вам нужен

paginationExist[0].tag

Только удостовертесь сначала что элементы вообще нашлись, иначе будет ошибка

if paginationExist:
    paginationExist[0].tag

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up