Селектор Python xpath от div - PullRequest
0 голосов
/ 03 июня 2019

Я начал играть с python и наткнулся на то, что должно быть очень простым, но я не могу заставить его работать ... У меня был ниже HTML

<h2 class="sr-only">Available Products</h2>
<div id="productlistcontainer" data-defaultpageno="1" data-descfilter="" class="columns4 columnsmobile2" data-noproductstext="No Products Found" data-defaultsortorder="rank" data-fltrselectedcurrency="GBP" data-category="Category1" data-productidstodisableshortcutbuttons="976516" data-defaultpagelength="100" data-searchtermcategory="" data-noofitemsingtmpost="25">
    <ul id="navlist" class="s-productscontainer2">

Мне нужно использовать parser.xpath для получения значения элемента категории данных.

Я пытаюсь, например:

cgy = xpath('//div["data-category"]')

Что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 03 июня 2019

Попробуйте Selenium webdriver с питоном.

from selenium import webdriver
driver = webdriver.Chrome()
driver.get("url here")
element=driver.find_element_by_xpath("//div[@id='productlistcontainer']")
print(element.get_attribute('data-category'))

Или вы можете использовать Beautifulsoup, который является библиотекой python.

from bs4 import BeautifulSoup

doc = """
<h2 class="sr-only">Available Products</h2>
<div id="productlistcontainer" data-defaultpageno="1" data-descfilter="" class="columns4 columnsmobile2" data-noproductstext="No Products Found" data-defaultsortorder="rank" data-fltrselectedcurrency="GBP" data-category="Category1" data-productidstodisableshortcutbuttons="976516" data-defaultpagelength="100" data-searchtermcategory="" data-noofitemsingtmpost="25">
    <ul id="navlist" class="s-productscontainer2">
"""

soup = BeautifulSoup(doc,'html.parser')
print(soup.select_one('div#productlistcontainer')['data-category'])
1 голос
/ 03 июня 2019

Лично я использую lxml html для анализа, потому что, на мой взгляд, с ним легко и быстро работать. Я мог бы сократить, как на самом деле извлекается category, но я хотел показать вам как можно больше подробностей, чтобы вы могли понять, что происходит.

from lxml import html

def extract_data_category(tree):
    elements = [
        e
        for e in tree.cssselect('div#productlistcontainer')
        if e.get('data-category') is not None
    ]
    element = elements[0]
    content = element.get('data-category')
    return content

response = """
<h2 class="sr-only">Available Products</h2>
<div id="productlistcontainer" data-defaultpageno="1" data-descfilter="" class="columns4 columnsmobile2" data-noproductstext="No Products Found" data-defaultsortorder="rank" data-fltrselectedcurrency="GBP" data-category="Category1" data-productidstodisableshortcutbuttons="976516" data-defaultpagelength="100" data-searchtermcategory="" data-noofitemsingtmpost="25">
<ul id="navlist" class="s-productscontainer2">
"""

tree = html.fromstring(response)
data_category = extract_data_category(tree)
print (data_category)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...