python3bs4如何在特定div下选择span值

2024-03-28 19:52:20 发布

您现在位置:Python中文网/ 问答频道 /正文

使用python3和bs4时,我在选择两个不同div下的两个span值时遇到了问题。在

我想实现以下目标。在

1.)在lastPriceChg div下选择“chg chgUp”值。注:这也可以是“chg chgDown”。i、 e

<div class="lastPriceChg"><span class="price">0.023</span><span class="chg chgUp">0.0001 (0.44%)</span></div>

2.)有多个“panel”div,但我想要volumeformated值。i、 e

^{pr2}$

真正奇怪的是,如果我把网页html粘贴到一个html文档中,它可以工作。。。在

以下是我当前的非工作代码:

url = ('https://www.otcmarkets.com/stock/VDRM/quote')
page = urllib.request.urlopen(url).read()
soup = BeautifulSoup(page, "lxml")

for item in soup.findAll('span', attrs={'class': 'value'}):
    print(item.text.strip()

样品数量:

$ python scraper.py 
Get Change


 - 
 - 

执行以下工作:

html_doc = """
<div class="panel">
                <strong glossaryid="volume">Volume</strong>
                <span class="value" val="volumeFormatted">3,105,009</span>
                <strong class="under">Dividend</strong>
                <span class="value"><span formatcall="toPrice" val="dividend">N/A</span></span>
            </div>
"""
soup = BeautifulSoup(page, "lxml")

for item in soup.findAll('span', attrs={'class': 'value'}):
    print(item.text.strip()

样品数量:

$ python scraper.py 
Get Change
3,105,009
N/A

那么,为什么在实际从网站上阅读时,这种方法不起作用呢?在

编辑:以下是我要查找的span类的检查器屏幕截图: inpect screen shot of spans


Tags: divurlvaluehtmlpageitemclassstrong
2条回答

正如我在评论中提到的,这里是使用替代源的新代码。这比我现在想的要容易得多,因为我实际上得到了回报数据。=)

url = ('http://www.marketwatch.com/investing/stock/vdrm')
page = urllib.request.urlopen(url).read()
soup = BeautifulSoup(page, "lxml")
vol = soup.find('span', attrs={'class': 'volume last-value'})
volume = vol.text.strip()
chg = soup.find('span', attrs={'class': 'change percent q'})
change = chg.text.strip()
print ("Vol: {} Change: {}".format(volume, change))

信不信由你,你想要的东西真的不会出现在我收到的页面上。我想这是因为你生活在一个不同的地缘政治区域。这就是我对HTML感兴趣的地方。contents of div missing除此之外,其他项目的文本也是空的。在

没关系。我从你的图片中添加了第一个div中缺少的内容,我可以演示如何在不需要这样做的情况下获得第二个问题所需的内容。在

我打开HTML文件,添加了一些内容。我想说的主要内容是,您可以通过以下方式直接指定您想要的span元素。在

>>> soup = bs4.BeautifulSoup(open('temp.htm').read(),'lxml')
>>> spans = soup.findAll('span', attrs={'class': 'chg'})
>>> spans[0].text
'0.0022 (9.17%)'
>>> spans_2 = soup.findAll('span', attrs={'val': 'dividend'})
>>> spans_2[0].text
'\n'

不幸的是,我不能保证这对你有用。在

相关问题 更多 >