【问题标题】:How To Remove or Replace Words or Characters In A List如何删除或替换列表中的单词或字符
【发布时间】:2021-10-29 08:38:41
【问题描述】:

Python 脚本

import requests
import json
from bs4 import BeautifulSoup
import re
from requests_html import HTMLSession

url = 'https://www.dunelm.com/product/caldonia-check-natural-eyelet-curtains-1000187301?defaultSkuId=30729125'

r = requests.get(url)
source_text = r.text

# Regex for extract info
product_list = re.findall('{\"delivery\"*.*false*}}}', source_text)
print(product_list, type((product_list)))

with open("json-pattern.json", "w", encoding='utf-8') as file:
    file.write(str(product_list))

上述脚本从网站源代码中提取 JSON 数据,并将其作为 LIST 类型填充到 variable product_list 中。

问题

列表类型 (product_list) 包含一些流氓字符和单词,它们需要删除或替换才能正确构建 Python 字典,如下所示:

删除或替换

  1. [' = 完全删除
  2. '] = 完全删除
  3. \ \"(反斜杠引号)= 完全删除
  4. \'(反斜杠单引号)= 完全删除
  5. 未定义 = 替换为“未定义”

第 3 行和第 4 行字符之间不应有任何空格

通过删除不需要的字符,我可以使用 codebeautify.org 检查 JSON 数据的完整性

【问题讨论】:

  • 尝试替换解析后的json字符串的方法
  • 您能否提供一个示例,因为我对上述技术一无所知。
  • 它是一个字符串方法'your-string-goes-here'.replace('[', ''),你能发布你得到的结果吗?会有帮助的

标签: python json string list


【解决方案1】:

要解析Javascript数据,可以使用re模块+json.loads。例如:

import re
import json
import requests

url = "https://www.dunelm.com/product/caldonia-check-natural-eyelet-curtains-1000187301?defaultSkuId=30729125"

html_doc = requests.get(url).text

data = re.search(r"window\.D_REDUX_STATE=({.*?});", html_doc).group(1)
data = re.sub(r"undefined", '"undefined"', data)

data = json.loads(data)

# pretty print the data
print(json.dumps(data, indent=4))

打印:

{
    "delivery": {
        "productDeliveryMethods": {},
        "productDeliveryMethodsRequestId": null,
        "basketDeliveryMethodsByProductSkuId": {},
        "deliveryFetchFailure": false,
        "deliveryFetchRefresh": false,
        "fetchingDeliveryPromises": false
    },
    "ado": {
        "dataLoaded": false,
        "userLocation": {},
        "stores": [],
        "deliveryMethods": null
    },
    "basket": {
        "productSkusId": null,
        "preBasketQuantity": 1,
        "preXSellBasketQuantity": 1,
        "prices": null,
        "voucher": null,
        "lastAddedVoucher": null,
        "voucherErrors": [],
        "basketLoaded": false,
        "hasNoBasket": false,
        "notifications": [],
        "invalidateBasket": false,
        "deliveryCharges": null,
        "preferredDeliveryOption": null,
        "viewMode": "default",
        "isBasketLoading": false,
        "addingProduct": false,
        "stockAvailablity": null,
        "lastDeliveryOption": null,
        "selectedDeliveryCharge": null,
        "autoDeliveryOption": null,
        "basketSplit": null,
        "storeState": null,
        "storeName": null,
        "pdpBasketPopup": {
            "products": []
        },
        "isSharedBasket": false,
        "isVoucherLoading": false,
        "productUpdate": null,
        "removeProduct": false,
        "updatingBasketProducts": false
    },
    "product": {
        "productById": {
            "1000187301": {
                "id": "1000187301",
                "productUrl": "caldonia-check-natural-eyelet-curtains-1000187301",
                "name": "Caldonia Check Natural Eyelet Curtains",


...and so on.

【讨论】:

  • 嗨,Andrej,非常感谢您为我的问题提供清晰简洁的解决方案。特别是,我想以您对描述的方式表示感谢。虽然我可能不完全理解所有显示的技术,但这是一个很好的学习起点。太棒了!!!
【解决方案2】:

您可以对每个不需要的字符使用以下方法:

"your_string".replace("[,", "")

我认为它会起作用。

【讨论】:

  • 我需要删除/替换存储在 product_list 变量中的列表类型上的字符。正是这个变量包含了流氓角色。 r.text / source_text 变量包含 HTML 源代码,这些源代码已被进一步操作以通过正则表达式删除不需要的 HTML,并存储在 product_list 变量中。当我运行 print(product_list.replace("['","")) 只是返回 AttributeError: 'list' object has no attribute 'replace'
猜你喜欢
  • 1970-01-01
  • 2017-06-12
  • 1970-01-01
  • 1970-01-01
  • 2019-01-18
  • 1970-01-01
  • 2022-08-15
  • 2014-05-24
  • 2013-03-14
相关资源
最近更新 更多