Как извлечь имена авторов, используя выражение XPath - PullRequest
0 голосов
/ 15 февраля 2019

Ниже приведен фрагмент HTML:

<div class="a-row a-spacing-none">
    <span class="a-size-small a-color-secondary">by 
    </span>
    <span class="a-size-small a-color-secondary">
        <a class="a-link-normal a-text-normal" href="/Lowell-Fryman/e/B01M3MNJTE/ref=sr_ntt_srch_lnk_1?qid=1550228622&amp;sr=1-1">
        Lowell Fryman
        </a> 
        and 
    </span>
    <span class="a-size-small a-color-secondary">
        <a class="a-link-normal a-text-normal" href="/Gregory-Lampshire/e/B01N7ZWT5Y/ref=sr_ntt_srch_lnk_1?qid=1550228622&amp;sr=1-1">
        Gregory Lampshire
        </a>
    </span>
</div>

Я пытаюсь получить имя всех авторов.Это любой тест, следующий за словом by.Я придумал следующий XPath, но, похоже, он не доставил всех авторов.

Мое выражение XPath:

//div//span[text()=\"by \"]//following::span[1]//a

Может кто-нибудь сказать, как получить имя для всехавторам хоть как-то удалось пропустить какой-либо элемент, у которого текст "а"?

Я использую find_element_by_xpath от Selenium, если это поможет.

Ответы [ 4 ]

0 голосов
/ 15 февраля 2019

Чтобы напечатать имя всех авторов, за которыми следует слово на , вы можете использовать одно из следующих решений:

  • Использование innerHTML:

    print([author.get_attribute("innerHTML") for author in driver.find_elements_by_xpath("//span[contains(., 'by')]//following::span/a[@class='a-link-normal a-text-normal'][@href]")])
    
  • Использование text:

    print([author.text for author in driver.find_elements_by_xpath("//span[contains(., 'by')]//following::span/a[@class='a-link-normal a-text-normal'][@href]")])
    
0 голосов
/ 15 февраля 2019

Попробуйте приведенный ниже код. Это должно сработать. Будет доставлено все автора.

elements=driver.find_elements_by_xpath("//a[@class='a-link-normal a-text-normal']")

for element in elements:
    print(element.text)

Пожалуйста, дайте мне знать, если эта работа.

0 голосов
/ 15 февраля 2019

вы можете сначала получить текст всех элементов span в списке, а затем вырезать его из текстового значения «по»

elements = [_.text() for _ in driver.find_elements_by_css_selector('div.span')]
print elements[elements.index('by'):] 
0 голосов
/ 15 февраля 2019

Здесь xpath можно использовать для получения авторов:

//div[./span[normalize-space(.='by')]]//a

или

//div[./span[contains(.,'by')]]//a


Ваш xpath должен быть таким:

//span[normalize-space(.='by')]/following-sibling::span//a
...