0

关于(在 Python 中提取 URL)我有一个后续问题。注意:我是 SO 和 Python 的新手,所以请随时纠正我的礼仪。

我从上面的帖子中提取了正则表达式,这对我来说很好:

myString = """ <iframe width="640" height="390" src="http://www.youtube.com/embed/24WIANESD7k?rel=0" frameborder="0" allowfullscreen></iframe> """
print re.search("(?P<url>https?://[^\s]+)", myString).group("url")

但是,我真正需要做的是遍历我之前从数据库中检索到的数据集。所以我做了下面,这给了我一个奇怪的错误,也在下面。

# Note: "data" here is actually a list of strings, not a data set     
for pseudo_url in data:
        print re.search("(?P<url>https?://[^\s]+)", str(pseudo_url)).group("url")

错误:

Traceback (most recent call last):
  File "find_and_email_bad_press_urls.py", line 136, in <module>
    main()
  File "find_and_email_bad_press_urls.py", line 14, in main
    scrubbed_urls = extract_urls_from_raw_data(raw_url_data)
  File "find_and_email_bad_press_urls.py", line 47, in extract_urls_from_raw_data
    print re.search("(?P<url>https?://[^\s]+)", str(pseudo_url)).group("url")
AttributeError: 'NoneType' object has no attribute 'group'

当我用谷歌搜索时,我发现了大量不相关的帖子,所以我希望 SO 能有所启发。我的预感是正则表达式在一些空数据、特殊字符等上被炸毁了,但我对 Python 的了解还不够,无法弄清楚。转换为字符串也无济于事。

任何想法或解决方法都将不胜感激!

4

1 回答 1

2

您的正则表达式没有在data. 在拨打电话之前,您应该检查以确保您有匹配group

for pseudo_url in data:
    m = re.search("(?P<url>https?://[^\s]+)", pseudo_url)
    if m:
        print m.group("url")

str()如果 pseudo_url 已经是一个字符串,则不需要调用任何一个。

正如@Blender 在他的评论中所建议的那样,如果data真的是从 HTML 文件中读取的行,您可能需要考虑使用 Beautiful Soup 而不是正则表达式。

于 2012-06-06T02:54:01.440 回答