在Python中查询<div class =“ name”>

时间:2018-08-01 23:35:47

标签: python-3.x web-scraping beautifulsoup

我正在尝试遵循此处发布的指南:https://medium.freecodecamp.org/how-to-scrape-websites-with-python-and-beautifulsoup-5946935d93fe

我现在在这里,我应该以大概的名字来命名。

获取名称的div并获取其值

name_box = soup.find('h1',attrs = {'class':'name'})

我怀疑查询价格时也会遇到麻烦。我必须用html中的“ priceText__1853e8a5”替换“ price”吗?

获取指数价格

price_box = soup.find('div',attrs = {'class':'price'})

谢谢,这将是巨大的帮助。

2 个答案:

答案 0 :(得分:0)

如果将price替换为priceText__1853e8a5,将会得到结果,但是我怀疑类名是动态更改的/是动态生成的(请注意末尾的数字)。因此,要获得结果,您需要更强大的功能。

您可以使用CSS选择器(通过select() / select_one()方法来定位BeautifulSoups中的标签。此示例将定位以<span>属性为class的所有priceText标签1}}(^=运算符-有关CSS选择器here的更多信息)。

from bs4 import BeautifulSoup
import requests

r = requests.get('https://www.bloomberg.com/quote/SPX:IND')
soup = BeautifulSoup(r.text, 'lxml')

print(soup.select_one('span[class^="priceText"]').text)

此打印:

2,813.36

答案 1 :(得分:0)

您可以选择几种方法。

  1. 通过适当的xPath获取值。
  

// span [包含(@class,'priceText __')]

  1. 编写正则表达式以查找确切的元素。
  

price_tag = soup.find_all('span',{'class':   re.compile(r'priceText __。*?')})

我不确定正则表达式模式,因为它不好。欢迎进行编辑。