使用Python和Selenium通过标记获取多个元素

csga3l58  于 2022-11-24  发布在  Python
关注(0)|答案(3)|浏览(186)

我的代码进入一个网站,并刮行信息(标题和时间)。
但是,有一个标记('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 don’t know how to scrape
    print(title.text, tim.text, tex.text)
agxfikkp

agxfikkp1#

我检查了页面,发现有几个p标签,我建议使用find_elements_by_tag_name而不是find_element_by_tag_name(以获得所有p标签,包括您想要的p标签),并迭代所有p标签元素,然后加入文本内容并对其进行剥离。

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)
sirbozc5

sirbozc52#

因为网页有几个p标签,所以最好使用.find_elements_by_class()方法。将代码中的print调用替换为:

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

ztmd8pv53#

也许可以尝试使用不同的 find_elements_by_class......我不怎么使用Python,但是除非你已经使用了,否则试试这个。

相关问题