Python 如何仅使用BeautifulSoup选择第n(42)个`p`标记?

Python 如何仅使用BeautifulSoup选择第n(42)个`p`标记?,python,python-3.x,beautifulsoup,keyerror,Python,Python 3.x,Beautifulsoup,Keyerror,我编写了一个程序,从https://www.coinbase.com/price至pyt.txt。如何从这个文本文件中解析比特币的价格并将其打印出来 到目前为止,我已经了解到,页面源代码中的第42个p标签是决定比特币价格的标签。因此,我尝试提取并打印该值的代码如下: import bs4 file = open('location/pyt.txt', 'r') soup = bs4.BeautifulSoup(file, 'lxml') for btc in soup.find_all('p'

我编写了一个程序,从
https://www.coinbase.com/price
pyt.txt
。如何从这个文本文件中解析比特币的价格并将其打印出来

到目前为止,我已经了解到,页面源代码中的第42个
p
标签是决定比特币价格的标签。因此,我尝试提取并打印该值的代码如下:

import bs4
file = open('location/pyt.txt', 'r')

soup = bs4.BeautifulSoup(file, 'lxml')
for btc in soup.find_all('p'):
    print(btc[41])

file.close()
当我运行它时,我得到一个错误:

return self.attrs[key]
KeyError: 41

经过几个小时的YouTube和Google搜索,BeautifulSoup似乎效果最好,但我就是想不通。你可以使用CSS选择器
p:n(42)
,它将选择第42个
标记

print(soup.select_one('p:nth-of-type(42)'))

btc不是列表或任何其他数据类型,而是字符串
因此,如果您想以这种方式访问第41个p标记,您可以将每个项目附加到列表中,然后访问列表的索引

我假设('p')会将所有p标记分配给“btc”,并创建一个列表。你知道我应该如何创建这样的列表吗?我将“forbtc in soup.find_all('p'):print(btc[41])”替换为“print(soup.select_one('p:nth of type(42)')”),它返回“None”。你知道可能是什么问题吗,因为我没有收到任何错误,所以它似乎“起作用”。@testical请用HTML编辑你的问题。下面有很好的答案,但我想推荐在API上使用。见和。这样,如果您的站点更改其页面的格式,您将受到保护。