【问题标题】:How to scrape a string from the div tag using Selenium and Python?如何使用 Selenium 和 Python 从 div 标签中抓取字符串?
【发布时间】:2019-07-19 14:09:35
【问题描述】:

我有如下代码的源代码。我正在尝试刮掉“11只老虎”的字符串。我是 xpath 的新手,谁能建议如何使用硒或美丽的汤来获得它?我在想driver.find_element_by_xpathsoup.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>

【问题讨论】:

    标签: python-3.x selenium xpath beautifulsoup css-selectors


    【解决方案1】:

    您可以为 BS 和 Selenium 使用相同的 .count-box .label-container css 选择器。

    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)
    

    硒:

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

    【讨论】:

    • 谢谢,我试过 Selenium 解决方案,效果很好。
    【解决方案2】:

    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显式安装它

    【讨论】:

      【解决方案3】:

      要提取文本11 Tigers,您可以使用以下任一解决方案:

      • 使用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")
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多