【问题标题】:Get multiple elements by tag with Python and Selenium使用 Python 和 Selenium 按标签获取多个元素
【发布时间】:2023-03-09 10:30:01
【问题描述】:

我的代码进入一个网站,并抓取信息行(标题和时间)。

但是有一个标签('p')我不知道如何使用'get element by'。

在网站上,就是每个标题下的信息。

这是我目前的代码

import time

from selenium import webdriver
from bs4 import BeautifulSoup
import requests

driver = webdriver.Chrome()
driver.get('https://www.nutritioncare.org/ASPEN21Schedule/#tab03_19')
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
eachRow = driver.find_elements_by_class_name('timeline__item')
time.sleep(1)
for item in eachRow:
    time.sleep(1)
    title=item.find_element_by_class_name('timeline__item-title')
    tim=item.find_element_by_class_name('timeline__item-time')
    tex=item.find_element_by_tag_name('p') # this is the part i dont know how to scrape
    print(title.text,tim.text,tex.text)

【问题讨论】:

    标签: python css selenium css-selectors


    【解决方案1】:

    我检查了页面并且有几个 p 标签,我建议使用 find_elements_by_tag_name 而不是 find_element_by_tag_name(获取所有 p 标签,包括您想要的 p 标签)并遍历所有 p 标签元素和然后加入文字内容并在上面做strip

    from selenium import webdriver
    from bs4 import BeautifulSoup
    import time
    import requests
    driver = webdriver.Chrome()
    
    driver.get('https://www.nutritioncare.org/ASPEN21Schedule/#tab03_19')
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    eachRow = driver.find_elements_by_class_name('timeline__item')
    time.sleep(1)
    for item in eachRow:
        time.sleep(1)
        title=item.find_element_by_class_name('timeline__item-title')
        tim=item.find_element_by_class_name('timeline__item-time')
        tex=item.find_elements_by_tag_name('p')
        text = " ".join([i.text for i in tex]).strip()
        print(title.text,tim.text, text)
    

    【讨论】:

      【解决方案2】:

      由于网页有多个p标签,最好使用.find_elements_by_class()方法。将代码中的print 调用替换为以下内容:

          print(title.text,tim.text)
          for t in tex:
              if t.text == '':
                  continue
              print(t.text)
      

      【讨论】:

        【解决方案3】:

        也许可以尝试使用不同的 find_elements_by_class...我不太会使用 python,但除非你已经拥有,否则试试这个。

        【讨论】:

        • 不幸的是p标签没有类名
        • “p”代表什么?
        • 段落,不确定它是否被认为是标签或 css 选择器等
        • id 知道,因为标签名称应该可以工作,但如果不是,我想我不能帮助抱歉
        • 除非 xpath。 (//p[text() = 'JBL']) 有效
        猜你喜欢
        • 2018-12-06
        • 2021-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多