python - 如果有相同类名的跨度,如何抓取跨度类文本?
问题描述
[检查 youtube 屏幕的图像][1]
我想抓取突出显示的跨度类的文本。但问题是上面的跨度类与下面的具有相同的属性,就像两者一样,具有相同的类名,所以当我使用 bs4 使用 find() 编写代码时,它只抓取第一个跨度类的文本。所以请帮我解决这个问题,(在 python 中建议)[1]:https ://i.stack.imgur.com/mCqDp.png
解决方案
如何获得元“创建......之前”?
像往常一样,不仅有一种方法,我建议您将信息作为子元素查找:nth-of-type()
。
soup.select("[id='metadata-line'] > span:nth-of-type(2)")
按其类型选择父元素id
和其中的第二个元素<span>
这将为您提供必须循环的所有元素的列表,以获取每个文本:
for item in soup.select("[id='metadata-line'] > span:nth-of-type(2)"):
print(item.get_text())
如果您仍处于遍历所有搜索结果的循环中,则可能会使用select_one()
会给您单个项目而不是列表的内容,您可以get_text()
直接:
soup.select_one("[id='metadata-line'] > span:nth-of-type(2)").get_text()
例子
from selenium import webdriver
from bs4 import BeautifulSoup
from time import sleep
driver = webdriver.Chrome(executable_path='C:\Program Files\ChromeDriver\chromedriver.exe')
url = "https://www.youtube.com/results?search_query=data+science"
driver.get(url)
sleep(5)
soup = BeautifulSoup(driver.page_source, "lxml")
for item in soup.select("[id='metadata-line'] > span:nth-of-type(2)"):
print(item.get_text())
driver.close()
输出
vor 5 Monaten
vor 2 Jahren
vor 1 Jahr
vor 2 Jahren
vor 1 Jahr
vor 7 Monaten
vor 8 Monaten
vor 2 Monaten
vor 1 Monat
vor 1 Jahr
vor 1 Jahr
vor 3 Wochen
vor 1 Monat
vor 1 Tag
vor 4 Monaten
vor 9 Monaten
vor 8 Monaten
vor 2 Monaten
vor 5 Monaten
vor 1 Jahr
vor 1 Jahr
vor 4 Wochen
推荐阅读
- reporting-services - PowerBI:RDL -> PBIX 转换 // 有可能吗?
- google-cloud-platform - 无法通过 IAP 隧道连接到 GCP 中的笔记本实例
- docker - Docker tmux 问题
- python - 基本神经网络结构的理解
- graph - 在 gremlin 查询中显示子级别
- regex - 正则表达式 PCRE:跳过前 n 次出现?
- http-headers - 单个 api 端点的多重访问令牌
- javascript - How to make InnerHTML to work as innerText?
- angular - Angular 9:formData.append('key', null) 实际上附加了 'null' 字符串
- php - WooCommerce - How can I stop the New Order email being sent to admin recipient if a certain shipping method is used?