Как получить информацию из HTML-скрипта ниже? - PullRequest
0 голосов
/ 11 ноября 2019

Я извлек следующий скрипт из html с использованием Beautiful-Soup:

<script>
   dataLayer =[{
  "pageTitle": "PRODUCT: Macculloch Parka Print( 9512MP )",
  "pageCategory": "shop-mens-parkas",
  "visitorLoginState": "Guest",
  "EmployeeLoginState": false,
  "customerEmail": "null",
  "customerOrders": "null",
  "customerValue": "0",
  "Country": "CA",
  "State": "ON",
  "ecommerce": {
    "currencyCode": "CAD",
    "detail": {
      "actionField": {
        "list": "Product Category / Search Results"
         },

      "products": [
        {
          "name": "Macculloch Parka Print",
          "id": "9512MP",
          "price": 1295,
          "brand": "Canada Goose",
          "category": "shop-mens-parkas"}]}}}];</script>

Я хочу извлечь информацию, связанную с продуктом (имя, идентификатор, цена и бренд), в виде информационного кадра. Есть ли способ сделать это без использования регулярных выражений?

Ответы [ 2 ]

0 голосов
/ 16 ноября 2019

Это временное решение, зависящее от получения дополнительной информации о формате данных.

import re
import json

def get_datalayer_json(raw_script_tag: str):
    parser_re = r"<script>\s*dataLayer =(.*);\s*</script>"
    parser_result = re.match(parser_re, raw_script_tag.strip(), re.DOTALL)
    if parser_result is None:
        return None
    else:
        return json.loads(parser_result.group(1))
0 голосов
/ 12 ноября 2019

Вы можете использовать regex, чтобы получить json и разобрать:

import json
import re

data = json.loads(re.search(r"dataLayer =(.*);", d, re.DOTALL).group(1))
products = data[0]["ecommerce"]["detail"]["products"]
product_name = products[0]["name"]
product_id = products[0]["id"]
product_price = products[0]["price"]
product_brand = products[0]["brand"]
product_category = products[0]["category"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...