从源代码中隐藏的值 - 网络抓取 Python

Values Hidden From Source Code- Webscraping Python

本文关键字:网络 抓取 Python 源代码 隐藏      更新时间:2023-09-26

我正在尝试网络抓取一个网站,当我浏览源代码时,我正在寻找的东西不存在。网站 http://www.providentmetals.com/2016-1-oz-canadian-silver-cougar.html,我正在寻找的是右上角表格中的价格。它说"1+",然后是价格。现在大约是 18.04 美元。当我使用 Web 开发人员工具"检查元素"时,我可以看到价格。使用美丽汤,我试图获取值,但它没有显示。这是粗略的代码。它根本不返回值

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 来查找数据吗?我不擅长编码和网络抓取,所以任何帮助都会很好。

这些值不是隐藏的,它们是通过 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'