使用 Python 和 Selenium 按标签获取多个元素

Posted

技术标签:

【中文标题】使用 Python 和 Selenium 按标签获取多个元素【英文标题】:Get multiple elements by tag with Python and Selenium 【发布时间】:2021-05-17 22:04:24 【问题描述】:

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

但是有一个标签('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)

【问题讨论】:

【参考方案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']) 有效

以上是关于使用 Python 和 Selenium 按标签获取多个元素的主要内容,如果未能解决你的问题,请参考以下文章

python下用selenium的webdriver包如何在执行完点击下一页后没有获得下一页新打开页面的html源代码

Python+Selenium+PhantomJs爬虫 怎么抓取弹出新标签页的内容

使用 Python 和 Selenium 按文本单击按钮

python下用selenium的webdriver包如何在执行完点击下一页后获得下一页新打开页面的html源代码呢?

如何通过 Selenium 和 Python 从 html 标签跨度获取文本

python,selenium如何按回车键