无法抓取产品状态

时间:2020-05-27 16:20:58

标签: python web-scraping beautifulsoup python-requests

我想了解网站的价格和状态。我能够刮擦价格,但无法刮擦状态。同样在JSON中找不到。

enter image description here

这是链接:https://www.zoro.com/jonard-tools-diagonal-cutting-plier-8-l-jic-2488/i/G2736212/?recommended=true

from requests import get
from bs4 import BeautifulSoup

resp = get(url)
soup = BeautifulSoup(resp.text, 'lxml')

# print(soup.prettify())
price = soup.find('div', class_ = 'product-price')

status = soup.find('div', class_ = 'avl-status buy-box__shipping-item')

print(status.text)

1 个答案:

答案 0 :(得分:2)

您可以使用页面内嵌的Json微格式来获取可用性(价格,图像,说明...)。

例如:

import json
import requests
from bs4 import BeautifulSoup

url = "https://www.zoro.com/jonard-tools-diagonal-cutting-plier-8-l-jic-2488/i/G2736212/?recommended=true"

soup = BeautifulSoup( requests.get(url).content, 'html.parser' )

data = json.loads(soup.select_one('script[type="application/ld+json"]').contents[0])

# uncomment this to print all data:
# print(json.dumps(data, indent=4))

print('Price       : ', data['offers']['price'])
print('Availability: ', data['offers']['availability'])

打印:

Price       :  17.13
Availability:  http://schema.org/InStock

编辑:您可以观察页面中嵌入的所有产品数据:

import json
import requests
from bs4 import BeautifulSoup

url = "https://www.zoro.com/baldwin-filters-filter-service-kit-thermo-king-bk6092/i/G1609513/"
# url = 'https://www.zoro.com/jonard-tools-diagonal-cutting-plier-8-l-jic-2488/i/G2736212/?recommended=true'

soup = BeautifulSoup( requests.get(url).content, 'html.parser' )
data = json.loads(soup.select_one('div.hidden[data-state]')['data-state'] )

# uncomment this to print all data:
# print(json.dumps(data, indent=4))

_, product_data = data['product']['productDetailsData'].popitem()

print(json.dumps(product_data, indent=4))

print()
print('isExpeditable = ', product_data['isExpeditable'])

将此键isExpeditable设置为False时,表示直接运送(我认为)。当我用库存产品进行测试时,它会显示True

输出:

{
    "packageQty": 1,
    "isMotorCompliant": false,
    "zoroNo": "G1609513",
    "brand": "Baldwin Filters",
    "salesStatus": "TP",
    "orderChannel": "Default",
    "description": "Filter Service Kit, For Vehicle Type - Filter Kits Thermo King, Includes Lube Spin-On, Fuel, Water Separator Element, Fuel Spin-On",
    "restrictedStates": [],
    "title": "Filter Service Kit",
    "categoryPaths": [
        [
            {
                "name": "Automotive Filters",
                "slug": "automotive-filters",
                "code": "7540"
            },
            {
                "name": "Filter Service Kits",
                "slug": "filter-service-kits",
                "code": "10660"
            }
        ]
    ],
    "restrictedSaleItemCode": "",
    "slug": "baldwin-filters-filter-service-kit-thermo-king-bk6092",
    "energyGuideLabelFileName": "",
    "variants": null,
    "isForcedOutOfStock": false,
    "lightingFactLabelFileName": "",
    "isExpeditable": false,
    "erpId": "2770121",
    "californiaProp65Message": null,
    "isHazmat": false,
    "leadTime": 8,
    "mfrNo": "BK6092",
    "attributes": [
        {
            "name": "For Vehicle Type - Filter Kits",
            "value": "Thermo King"
        },
        {
            "name": "Item",
            "value": "Filter Service Kit"
        },
        {
            "name": "For Use With",
            "value": "Thermo King"
        },
        {
            "name": "Includes",
            "value": "Lube Spin-On, Fuel, Water Separator Element, Fuel Spin-On"
        },
        {
            "name": "Country of Origin (subject to change)",
            "value": "United States"
        }
    ],
    "originalPrice": null,
    "isCircleECompliant": false,
    "lowLeadComplianceLevel": "",
    "priceUnit": "EA",
    "isDropShipDirect": false,
    "minRetailQty": 1,
    "price": 118.29,
    "media": [
        {
            "name": "Z1qr7ymcpEx_.JPG",
            "type": "image/jpeg"
        }
    ]
}

isExpeditable =  False