如何删除或替换列表中的单词或字符

Posted

技术标签:

【中文标题】如何删除或替换列表中的单词或字符【英文标题】: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 字典,如下所示:

删除或替换

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

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

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

【问题讨论】:

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

以上是关于如何删除或替换列表中的单词或字符的主要内容,如果未能解决你的问题,请参考以下文章

仅用连字符替换单词之间的空格并删除所有其他空格[重复]

如何删除字符串中的重复项

删除 Pandas 中字符串列中的 Dash/Dots 并将其替换为 Null

如何从字符串中删除特定单词 - Ruby

如何使用 nltk 或 python 删除停用词

如何在 JavaScript 中删除或替换 ´? [复制]