【问题标题】:how do I extract the Url data from my string如何从我的字符串中提取 Url 数据
【发布时间】:2019-04-26 18:49:01
【问题描述】:

我有以下包含许多 Url 值的字符串。如何在此字符串中的 DataUrl 术语之后提取 Url?所以我得到了一个网址列表 例如:americanexpress.com、vice.com、chegg.com

{'DataUrl': 'americanexpress.com', 'Country': {'Rank': '96', 'Reach': {'PerMillion': '7350'}, 'PageViews': {'PerMillion': '600.2', 'PerUser': '3.6'}}, 'Global': {'Rank': '362'}}, {'DataUrl': 'vice.com', 'Country': {'Rank': ' 97', 'Reach': {'PerMillion': '15703.61'}, 'PageViews': {'PerMillion': '489.97', 'PerUser': '1.38'}}, 'Global': {'Rank': ' 208'}}, {'DataUrl': 'chegg.com', 'Country': {'Rank': '98', 'Reach': {'PerMillion': '6280'}, 'PageViews': {'PerMillion ': '882.3', 'PerUser': '6.2'}}, 'Global': {'Rank': '402'}}, {'DataUrl': 'mlb.com', 'Country': {'Rank' : '99', 'Reach': {'PerMillion': '7280'}, 'PageViews': {'PerMillion': '564.1', 'PerUser': '3.42'}}, 'Global': {'Rank' : '427'}}, {'DataUrl': 'xnxx.com', 'Country': {'Rank': '100', 'Reach': {'PerMillion': '5560'}, 'PageViews': { 'PerMillion': '1271', 'PerUser': '10.1'}}, 'Global': {'Rank': '95'}

我尝试了各种 FindAll 表达式。

【问题讨论】:

  • 您是指来自 BeautifulSoup 的 FindAll 还是类似的?你有类似于 JSON 数据的东西,而不是 HTML。
  • 你错过了最后一个}...?

标签: python string extract


【解决方案1】:

Python 有一个名为 json 的内置包,可用于处理 JSON 数据。

您可以将您的python对象转换为json对象,然后轻松获取DataUrl。

请参考https://www.w3schools.com/python/python_json.asp

【讨论】:

  • 我尝试了以下方法: test = open(r'data.txt', 'r') test = test.read() test = json.dumps(test) test = json.loads(测试)我将如何获得 DataUrl 值?
  • 执行 test = json.loads(test) 后,test 拥有完整的 JSON 对象。现在您可以使用 for 循环从每个条目中获取 DataUrl。
  • @hthomas 如果您可以使用json.loads() 加载它,那么请在我的答案中查看代码 - 我用json.loads 做了一个示例
【解决方案2】:

它看起来像 JSON 数据的一部分,所以如果您有完整的 JSON 数据,那么您可以使用模块 json 加载它并在字典中搜索 DataUrl

如果您的 JSON 数据不完整,则可以使用 regex

text = '''{'DataUrl': 'americanexpress.com', 'Country': {'Rank': '96', 'Reach': {'PerMillion': '7350'}, 'PageViews': {'PerMillion': '600.2', 'PerUser': '3.6'}}, 'Global': {'Rank': '362'}}, {'DataUrl': 'vice.com', 'Country': {'Rank': '97', 'Reach': {'PerMillion': '15703.61'}, 'PageViews': {'PerMillion': '489.97', 'PerUser': '1.38'}}, 'Global': {'Rank': '208'}}, {'DataUrl': 'chegg.com', 'Country': {'Rank': '98', 'Reach': {'PerMillion': '6280'}, 'PageViews': {'PerMillion': '882.3', 'PerUser': '6.2'}}, 'Global': {'Rank': '402'}}, {'DataUrl': 'mlb.com', 'Country': {'Rank': '99', 'Reach': {'PerMillion': '7280'}, 'PageViews': {'PerMillion': '564.1', 'PerUser': '3.42'}}, 'Global': {'Rank': '427'}}, {'DataUrl': 'xnxx.com', 'Country': {'Rank': '100', 'Reach': {'PerMillion': '5560'}, 'PageViews': {'PerMillion': '1271', 'PerUser': '10.1'}}, 'Global': {'Rank': '95'}'''

import re

urls = re.findall("'DataUrl': '([^']*)'", text)

print(urls)

结果

['americanexpress.com', 'vice.com', 'chegg.com', 'mlb.com', 'xnxx.com']

你也可以试试.split("{'DataUrl': '")split("',")

text = '''{'DataUrl': 'americanexpress.com', 'Country': {'Rank': '96', 'Reach': {'PerMillion': '7350'}, 'PageViews': {'PerMillion': '600.2', 'PerUser': '3.6'}}, 'Global': {'Rank': '362'}}, {'DataUrl': 'vice.com', 'Country': {'Rank': '97', 'Reach': {'PerMillion': '15703.61'}, 'PageViews': {'PerMillion': '489.97', 'PerUser': '1.38'}}, 'Global': {'Rank': '208'}}, {'DataUrl': 'chegg.com', 'Country': {'Rank': '98', 'Reach': {'PerMillion': '6280'}, 'PageViews': {'PerMillion': '882.3', 'PerUser': '6.2'}}, 'Global': {'Rank': '402'}}, {'DataUrl': 'mlb.com', 'Country': {'Rank': '99', 'Reach': {'PerMillion': '7280'}, 'PageViews': {'PerMillion': '564.1', 'PerUser': '3.42'}}, 'Global': {'Rank': '427'}}, {'DataUrl': 'xnxx.com', 'Country': {'Rank': '100', 'Reach': {'PerMillion': '5560'}, 'PageViews': {'PerMillion': '1271', 'PerUser': '10.1'}}, 'Global': {'Rank': '95'}'''

urls = text.split("{'DataUrl': '")
urls = [item.split("',")[0] for item in urls if item]
print(urls)

结果

['americanexpress.com', 'vice.com', 'chegg.com', 'mlb.com', 'xnxx.com']

如果您有完整且格式正确的 JSON - 使用 " 而不是 ' - 那么您可以使用模块 json

这里我使用完整的 JSON

text = '''[{'DataUrl': 'americanexpress.com', 'Country': {'Rank': '96', 'Reach': {'PerMillion': '7350'}, 'PageViews': {'PerMillion': '600.2', 'PerUser': '3.6'}}, 'Global': {'Rank': '362'}}, {'DataUrl': 'vice.com', 'Country': {'Rank': '97', 'Reach': {'PerMillion': '15703.61'}, 'PageViews': {'PerMillion': '489.97', 'PerUser': '1.38'}}, 'Global': {'Rank': '208'}}, {'DataUrl': 'chegg.com', 'Country': {'Rank': '98', 'Reach': {'PerMillion': '6280'}, 'PageViews': {'PerMillion': '882.3', 'PerUser': '6.2'}}, 'Global': {'Rank': '402'}}, {'DataUrl': 'mlb.com', 'Country': {'Rank': '99', 'Reach': {'PerMillion': '7280'}, 'PageViews': {'PerMillion': '564.1', 'PerUser': '3.42'}}, 'Global': {'Rank': '427'}}, {'DataUrl': 'xnxx.com', 'Country': {'Rank': '100', 'Reach': {'PerMillion': '5560'}, 'PageViews': {'PerMillion': '1271', 'PerUser': '10.1'}}, 'Global': {'Rank': '95'}}]'''
text = text.replace("'", '"')

import json

data = json.loads(text)
urls = [item['DataUrl'] for item in data]

print(urls)

结果

['americanexpress.com', 'vice.com', 'chegg.com', 'mlb.com', 'xnxx.com']

【讨论】:

    猜你喜欢
    • 2011-12-14
    • 2011-05-22
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 2021-03-06
    • 2016-07-21
    • 1970-01-01
    相关资源
    最近更新 更多