Как очистить строку от тега div, используя Selenium и Python? - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть исходный код, подобный приведенному ниже.Я пытаюсь вычистить строку «11 тигров».Я новичок в xpath, кто-нибудь может подсказать, как получить его с помощью селена или красивого супа?Я думаю driver.find_element_by_xpath или soup.find_all.

источник:

<div class="count-box fixed_when_handheld s-vgLeft0_5 s-vgPullBottom1 s-vgRight0_5 u-colorGray6 u-fontSize18 u-fontWeight200" style="display: block;">
<div class="label-container u-floatLeft">11 tigers</div>
<div class="u-floatRight">
<div class="hide_when_tablet hide_when_desktop s-vgLeft0_5 s-vgRight0_5 u-textAlignCenter">
<div class="js-show-handheld-filters c-button c-button--md c-button--blue s-vgRight1">
Filter
</div>
<div class="js-save-handheld-filters c-button c-button--md c-button--transparent">
Save
</div>
</div>
</div>
<div class="cb"></div>
</div>

Ответы [ 3 ]

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

Вариант ответа от Sers.

page = BeautifulSoup(html_text, "lxml")

# first one
label = page.find('div',{'class':'count-box label-container')).text

# for all
labels = page.find('div',{'class':'count-box label-container'))
for label in labels:
    print(label.text)

Используйте lxml синтаксический анализатор, поскольку он быстрее.Вам необходимо установить его явно через pip install lxml

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

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

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

    my_text = driver.find_element_by_css_selector("div.count-box>div.label-container.u-floatLeft").get_attribute("innerHTML")
    
  • Использование xpath:

    my_text = driver.find_element_by_xpath("//div[contains(@class, 'count-box')]/div[@class='label-container u-floatLeft']").get_attribute("innerHTML")
    
0 голосов
/ 26 февраля 2019

Вы можете использовать один и тот же селектор .count-box .label-container css для BS и Selenium.

BS:

page = BeautifulSoup(yourhtml, "html.parser")
# if you need first one
label = page.select_one(".count-box .label-container").text
# if you need all
labels = page.select(".count-box .label-container")
for label in labels:
    print(label.text)

Selenium:

labels = driver.find_elements_by_css_selector(".count-box .label-container") 
for label in labels:
    print(label.text)
...