我试图通过网络搜索网站,当我浏览源代码时,我所寻找的并不存在。网站是http://www.providentmetals.com/2016-1-oz-canadian-silver-cougar.html,我正在寻找的是右上角表格中的价格。它说" 1 +"其次是价格。它现在约为18.04美元。 当我"检查元素"使用Web开发人员工具,我可以看到价格。 使用BeautifulSoup我试图获得价值,但它并没有显示出来。这里的代码很粗糙。 它根本不会返回值
import res,bs4
url='http://www.providentmetals.com/2016-1-oz-canadian-silver.cougar.html'
res=requests.get(url)
soup=bs4.BeautifulSoup(res.text,'lxml')
elems=soup.findAll('class',{'table':'table table-striped border-light pricing data-table'})
#table name found from inspect element web dev tool
问题:如何找到隐藏数据?您知道使用bs4 / requests查找数据有什么方法吗?我不擅长编码和网页编写,所以任何帮助都会很好。
答案 0 :(得分:0)
这些值不会被隐藏,它们是通过Ajax请求获得的,然后插入到页面的DOM中。这就是您在浏览器中看到它们的原因,而不是在网页的HTML中。
您可以直接访问获取所需数据的Ajax请求。响应采用JSON格式,因此非常易于使用。您需要知道SKU,例如,BBFS-04253。
网址是: http://www.providentmetals.com/services/products.php?type=product&sku=BBFS-04253
使用requests
模块:
import requests
url = 'http://www.providentmetals.com/services/products.php'
params = {'type': 'product', 'sku': 'BBFS-04253'}
response = requests.get(url, params)
data = response.json()
>>> from pprint import pprint
>>> pprint(data)
[{u'as_low_as': {u'crypto_price': u'$18.22',
u'list_price': u'$18.78',
u'price': u'$18.03',
u'qty': 1,
u'to_tier': u' + '},
u'crypto_price': u'$18.22',
u'crypto_special_price': u'$0.00',
u'id': u'6034',
u'inStock': None,
u'list_price': u'$18.78',
u'list_special_price': u'$0.00',
u'name': u'2016 1 oz Canadian Silver Cougar | Predator Series',
u'price': u'$18.03',
u'sell_to_us': u'$16.69',
u'sku': u'BBFS-04253',
u'special_price': None,
u'status_allows_price': True,
u'stock_status_code': u'pre-sale',
u'tier_price': [{u'crypto_price': u'$18.22',
u'list_price': u'$18.78',
u'price': u'$18.03',
u'qty': 1,
u'to_tier': u' + '}]}]
print data['price']
因此,您可以直接访问价格和其他详细信息:
>>> data[0]['price']
u'$18.03'
>>> data[0]['name']
u'2016 1 oz Canadian Silver Cougar | Predator Series'