首页 > 解决方案 > Python selenium web 在没有类名的嵌套范围内抓取动态内容

问题描述

我正在尝试解析嵌套跨度结构中的动态内容。我想得到的文本是“动态内容2”,它是第二个跨度元素(类=“第二跨度”)的内容,它的值会定期更新。

<html>
<div class="outer div">
     <span class="first span">
           <span>random content</span>
     </span>
     <span class="second span">
           <span>dynamic content2</span>
     </span>
</div>
</html>

我是网络抓取的新手,目前这就是我所拥有的:

import os, sys
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup


opts = Options()
opts.add_argument(" --headless")

chrome_driver = os.getcwd() +"\\chromedriver.exe"

# Instantiate a webdriver
driver = webdriver.Chrome(options=opts, executable_path=chrome_driver)
driver.get("some url")

soup_file=driver.page_source
soup = BeautifulSoup(soup_file)

# works fine
print(soup.title.get_text())

print("Testing getting dynamic element")

spanId = 'second span'
mySpan = soup.find("span", class_ = spanId )
print(mySpan.get_text())
driver.quit()

但是什么都没有返回。任何帮助表示赞赏。

标签: pythonseleniumselenium-webdriverweb-scraping

解决方案


这是输出dynamic content2

代码:

tag="""
<html>
<div class="outer div">
     <span class="first span">
           <span>random content</span>
     </span>
     <span class="second span">
           <span>dynamic content2</span>
     </span>
</div>
</html>
"""

soup = BeautifulSoup(tag, 'html.parser')

#span= soup.select_one('div.outer.div > span.second.span >span').text
#or
span= soup.select_one('span.second.span >span').text
print(span)

输出:

dynamic content2

推荐阅读