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