Py学习  »  Python

用于在python中提取脚本标记的regex

Кирилл Боровой • 4 年前 • 918 次点击  

我在python中有以下代码:

import sys, os, requests, datetime, time
from bs4 import BeautifulSoup
import urllib.request
import re
import json

def get_html(url):
    headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'}
    r = requests.get(url, headers=headers)
    return r.content
        

link = 'https://www.clubx.com.au/products/womanizer-pro?variant=37834367948'
soup = BeautifulSoup(get_html(link), 'html.parser')

obj = soup.find_all('script')[18]

m = re.search(r"\"variants\":\[(.*?)\]", obj.string)
if m:
    data = json.loads(m.group(1))
    print(data)

打印结果为:

json.decoder.jsondecodeerror:应为“,”分隔符:行1列 495(字符494)

如果我打印 obj.string ,我得到结果:

var粗体=粗体 bold.PRODUCTS=bold.PRODUCTS bold.variant_lookup=bold.variant_lookup bold.variant_lookup[37834367948] =“womanizer pro”;bold.variant_lookup[37834368076]=“womanizer pro”;bold.variant_lookup[37834368140]=“womanizer pro”;bold.variant_lookup[37834368204]=“womanizer pro”;bold.variant_lookup[37834368268]=“womanizer pro”;bold.products[“womanizer pro”]=“id”:10346996748,“title”:“womanizer pro”,“handle”:“womanizer pro”,“description”:\u003cdiv style=\“text-align:center;\”\u003e\u003cstrong\u003e这是一个网站 仅提供并排除所有零售店。 \ u003c/strong\u003e\u003c/div\u003e\n\u003cdiv style=\“文本对齐: 中心\ \ \\u003e\u003cstrong\u003e有限时间 仅限\u003c/strong\u003e\u003c/div\u003e\n\u003c p\u003e\u003c/p\u003e\n\u003c div style=\”文本对齐: 中心\ \ \\u003e\u003c strong\u003e\u003c/strong\u003e\u003c/div\u003e\n\u003cp\u003e 世界上最先进的阴蒂刺激器-女性化器 大世界肯定只是性玩具世界中的一个小新奇 情色产品女郎是一个真正的 革命。\u003c/p \u003e \n \u003cp \u003e革命性的女性主义者_? 技术使不接触阴蒂成为可能 第一次。前所未有的欲望体验 强烈的高潮,可以体验到。 过度刺激阴蒂已经成为过去。高潮 以以前从未有过的方式和力量-任何数量的 时代。\很多女性都经历过 新的高潮感觉。女性化技术与操作模式 与振动器无关,振动器是最温和但最强大的。 世界市场上的刺激器。 提供包括Womanizer_?、一个袋子、一个备用头、一个USB 充电电缆和操作 手动。\u003c/p\u003e\n\u003cp\u003e\u003c span\u003e请参阅\u003c/span\u003e\u003ca href=\“https://www.clubx.com.au/blogs/product reviews/is the womanizer right for you\” target=\“空白\”title=\“Womanizer产品评论\”rel=\“Noopener Noreferrer \\u003eour blog post \u003c/a \u003e \u003cspan \u003e获取 更多关于女性化者的信息 范围。\u003c/span\u003e\u003cbr\u003e\u003cbr\u003effeatures\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e非联系人 阴蒂刺激 强度可调控制(8 电平\u003c/li \u003e \n \u003cli \u003e可充电锂离子 电池\u003c/li \u003e \n \u003cli \u003etop卫生处理 可移动头(医用硅树脂) 大刺激头 阴蒂\u003c/li \u003e \n \u003cli \u003e德国上衣 设计\u003c/li \u003e \n \u003cli \u003e防溅\u003c/li \u003e \n \u003cli \u003eno 新快感空气的习惯效果 用施华洛世奇制造的技术 元素\u003c/li\u003e\n\u003cli\u003e材料:abs,邻苯二甲酸盐 免费\u003c/li\u003e\n\u003cli\u003e物质刺激头: 低过敏性医学 硅树脂\u003c/li \u003e \n \u003cli \u003e高级可充电 锂离子电池 保修\u003c/li\u003e\n\u003c/ul\u003e“,”发布于“:”2017-04-18t12:47:49“,”创建于“:”2017-04-18t13:19:07“,”供应商“:”女装者“,”类型“:”可控震源“,”标签“:[”薰衣草色“,”色豹色“,”品红色“,”薄荷色“,”玫瑰色“,”纹身色“,”白色“,”豪华“,”折扣“,”适用于 她,“刺激器”,“振动器”],“价格”:24999,“价格最低”:24999,“价格最高”:24999,“价格最低”:错误,“价格最低”:30999,“价格最低”:30999,“价格最高”:30999,“价格最低”:30999,“比较最高”:30999,“价格最低”:错误,“所有变量”:[37834367948334368076378343681403783436820437834368268],variants“:[”id“:37834367948”,title“:”black“,”option1“:”black“,”option2“:null,“option3”:null,“sku”:“1725205212”,“requires_shipping”:true,“taxable”:true,“featured_image”:“id”:2584573542512,“product_id”:10346996748,“position”:13,“created_at”:“2018-05-07t14:01:05+10:00”,“updated_at”:“2018-06-27t16:41”:12+10:00,“alt”:“女性化者” 职业黑人俱乐部 x“,”width“:700,”height“:700,”src“:”https://cdn.shopify.com/s/files/1/0682/0289/products/womanizer-pro-black.png?V=1530081672,“variant_id”:[37834367948],“available”:真,“name”:“womanizer” 亲 black“,”public_title”:“black”,“options”:[“black”],“price”:24999,“weight”:0,“compare_at_price”:30999,“inventory_quantity”:2,“inventory_management”:“shopify”,“inventory_policy”:“deny”,“barcode”:“703255205212”,“id”:37834368076,“title”:“品红色”,“option1”:“品红色”,“option2”:空,“option3”:空,“sku”:“1725205229”,“需要运输”:真,“应纳税”:真,“特色_image”:“id”:1186546876441,”产品_,“位置”:11,“创建于”:“2018-03-13t21:31:40+11:00”,“更新于”:“2018-05-22t12:06:24+10:00”,“alt”:“Womanizer” 专业品红色俱乐部 x“,”width“:600,”height“:600,”src“:”https://cdn.shopify.com/s/files/1/0682/0289/products/246979818968d47fc7413ea41f7d5158_1459914993_grande_ae47b27d-43fb-4e5c-a85f-b9a35036e0f4.jpg?V=1526954784,“variant_id”:[37834368076],“available”:true,“name”:“womanizer” 亲 品红色,“public_title”:“品红色”,“options”:[“品红色”],“price”:24999,“weight”:0,“compare_at_price”:30999,“inventory_quantity”:1,“inventory_management”:“shopify”,“inventory_policy”:“deny”,“barcode”:“703255205229”,“id”:37834368140,“title”:“mint”,“option1”:“mint”,“option2”:null,“option3”:null,“sku”:“1725205243”,“需要运输”:真,“应纳税”:真,“特色_image”:“id”:1186554576921,“产品编号”:10346996748,“位置”:14,“创建于”:“2018-03-13t21:34:08+11:00”,“更新于”:“2018-05-22t12:06:25+10:00”,“alt”:“Womanizer” 专业薄荷-俱乐部 x“,”width“:450,”height“:488,”src“:”https://cdn.shopify.com/s/files/1/0682/0289/products/048d21569da3a18c2c82a353c0e6e17a_1459916999_grande_151de093-60c4-45a1-aace-2ae3bf6c164.png?V=1526954785,“variant_id”:[37834368140],“available”:true,“name”:“womanizer” 亲 mint“,”public_title”:“mint”,“options”:[“mint”],“price”:24999,“weight”:0,“compare_at_price”:30999,“inventory_quantity”:6,“inventory_management”:“shopify”,“inventory_policy”:“deny”,“barcode”:“70325520543”,“id”:37834368204,“title”:“rose”,“option1”:“rose”,“option2”:null,“option3”:null,“sku”:“1722052”“50”,“需要运输”:真,“应纳税”:真,“特色_图像”:“ID”:1186542157849,“产品_ID”:10346996748,“位置”:10,“创建于”:“2018-03-13t21:30:24+11:00”,“更新于”:“2018-05-22t12:06:23+10:00”,“alt”:“Womanizer” 职业玫瑰俱乐部 x“,”width“:600,”height“:600,”src“:”https://cdn.shopify.com/s/files/1/0682/0289/products/7b2cc156142b59f315dc9832fd4c834_1460014564_grande_e8738aaa-5a85-4f83-a384-fd1b4e1f0b89.jpg?V=1526954783,“variant_id”:[37834368204],“available”:真,“name”:“womanizer” 亲 rose“,”public_title“:”rose“,”options“:[”rose“],”price“:24999,“weight”:0,“compare_at_price”:30999,“inventory_quantity”:1,“inventory_management”:“shopify”,“inventory_policy”:“deny”,“barcode”:“703255205250”,“id”:37834368268,“title”:“white”,“option1”:“white”,“option2”:null,“option3”:null,“sku”:“1725205236“,”需要运输“:真,”应税“:真,”特色“:假”ID“:1186555330585,”产品“:10346996748,”位置“:15,”创建时间“:2018-03-13t21:34:23+11:00”,“更新时间“:2018-05-22t12:06:26+10:00”,“alt”:“Womanizer” 职业白人俱乐部 x,“width”:600,“height”:600,“src”:“https://cdn.shopify.com/s/files/1/0682/0289/products/7892C10587439f32cc3cec90a960b059_1459918683_grande_bf23ffca-e3c1-498a-b5a2-70da92c22591.jpg?V=1526954786,“variant_id”:[37834368268],“available”:真,“name”:“womanizer” 亲 white“,”public_title”:“white”,“options”:[“white”],“price”:24999,“weight”:0,“compare_at_price”:30999,“inventory_quantity”:5,“inventory_management”:“shopify”,“inventory_policy”:“deny”,“barcode”:“703255205236”],“available”:false,“images”:[“//cdn.shopify.com/s/files/1/0682/0289/products/e03edb648fd35ff2fa27281176b81b_1460018691.jpg?v=1526954778“,”//cdn.shopify.com/s/files/1/0682/0289/products/womanizer-pro-purple_1.png?v=1526954779“,”//cdn.shopify.com/s/files/1/0682/0289/products/womanizer-pro-gold.png?v=1526954779“,”//cdn.shopify.com/s/files/1/0682/0289/products/8f66fcbb15839f44872691a6f6baa8e1_1459914986.jpg?v=1526954780“,”//cdn.shopify.com/s/files/1/0682/0289/products/fa5f253c5726b7bfe1ee169eb5df3cc_1459916829.png?v=1526954781“,”//cdn.shopify.com/s/files/1/0682/0289/products/ace7842e9a0769b9b9b12d393f14635d85_1459919036.jpg?v=1526954781“,”//cdn.shopify.com/s/files/1/0682/0289/products/d00d67d74f47e3c8e9414235fa3ebf3b_1460022454.png?v=1526954782“,”//cdn.shopify.com/s/files/1/0682/0289/products/6557e39ded6ea133945afff0d2a7a77_1459917861.jpg?v=1526954782“,”//cdn.shopify.com/s/files/1/0682/0289/products/5778230f1e1ea39ac8f7f6b9dc1bb623_1459917950_grande_71c126da-c86c-4593-a154-27c2e0dbf133.jpg?v=1528092578“,”//cdn.shopify.com/s/files/1/0682/0289/products/7b2cc156142b59f315dc9832fd4c834_1460014564_Grande_E8738AAA-5a85-4f83-a384-fd1b4e1f0b89.jpg?v=1526954783“,”//cdn.shopify.com/s/files/1/0682/0289/products/246979818968d47d47fc7413ea41f7d5158_1459914993_grande_ae47b27d-43fb-4e5c-a85f-b9a35036e0f4.jpg?v=1526954784“,”//cdn.shopify.com/s/files/1/0682/0289/products/e8e5cd8a56d792956774acdfb4960b2_1459914573_grande_5fc1db06-b57a-49b1-8461-f4a8f1fc3f9c.jpg?v=1530081671“,”//cdn.shopify.com/s/files/1/0682/0289/products/womanizer-pro-black.png?v=1530081672“,”//cdn.shopify.com/s/files/1/0682/0289/products/048d21569da3a18c2a3235c0e6e17a_1459916999_Grande_151de093-60c4-45a1-aace-2ae3bf6c164.png?v=1526954785“,”//cdn.shopify.com/s/files/1/0682/0289/products/7892c105874339f32cc3cec90a960b059_1459918683_grande_bf23ffca-e3c1-498a-b5a2-70da92c22591.jpg?v=1526954786“]”,“特色”image“:”//cdn.shopify.com/s/files/1/0682/0289/products/e03edb648fd35ff2fa27281176b81b_146018691.jpg?v=1526954778,“选项”:[“颜色”],“url”:“/products/womanizer pro”

我需要检查sku,标题来自 variants .

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38924
 
918 次点击  
文章 [ 1 ]  |  最新文章 4 年前
Rakesh
Reply   •   1 楼
Rakesh    5 年前

使用regex模式 r"\"variants\":\[(.*?)\]"

演示:

from bs4 import BeautifulSoup
import json
import re

s = """<script>var BOLD = BOLD || {};
    BOLD.products = BOLD.products || {};
    BOLD.variant_lookup = BOLD.variant_lookup || {};BOLD.variant_lookup[31066737740] ="womanizer";BOLD.variant_lookup[31066737804] ="womanizer";BOLD.variant_lookup[31066737868] ="womanizer";BOLD.variant_lookup[31066737996] ="womanizer";BOLD.variant_lookup[1509908217881] ="womanizer";BOLD.products["womanizer"] ={"id":8993669708,"title":"Womanizer","variants":[{"id":37834367948,"title":"Black","option1":"Black","option2":null,"option3":null,"sku":"1725205212"}]}
    </script>
"""

soup = BeautifulSoup(s, "html.parser")
src = soup.find("script")
m = re.search(r"\"variants\":\[(.*?)\]", src.string)
if m:
    data = json.loads(m.group(1))
    print(data)

输出:

{u'sku': u'1725205212', u'title': u'Black', u'id': 37834367948L, u'option2': None, u'option3': None, u'option1': u'Black'}