【问题标题】:How to extract information from a web page using python in json or xml format?如何使用python以json或xml格式从网页中提取信息?
【发布时间】:2015-10-19 09:38:57
【问题描述】:

我在从网页中提取信息方面需要帮助。我给出了 URL,然后我需要提取联系号码、地址、href、人名等信息。我能够完全提取页面源,以获得具有已知标签的所提供 URL。但是我需要一个通用的源代码来从任何 URL 中提取这些数据。我使用正则表达式来提取电子邮件,例如

import urllib
import re
#htmlfile=urllib.urlopen("http://www.plainsboronj.com/content/departmental-directory")
urls=["http://www.plainsboronj.com/content/departmental-directory"]
i=0
regex='\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b'
pattern=re.compile(regex)
print pattern
while i<len(urls):
    htmlfile=urllib.urlopen(urls[i])
    htmltext=htmlfile.read()
    titles=re.findall(pattern,htmltext)
    print titles
    i+=1

这给了我一个空列表。任何帮助提取我上面所说的所有信息将不胜感激。 这个想法是提供一个 URL 并以 json 或 xml 格式提取所有信息,如姓名、电话号码、电子邮件、地址等。提前谢谢大家...!!

【问题讨论】:

  • 你确定你的正则表达式是正确的吗?我已经下载了您正在访问的文件,并按照您的表达式进行过滤,结果因我使用的正则表达式类型而异(我使用了 Ultra Edit 文本编辑器(Perl 和 UNIX 正则表达式)和 Cygwin UNIX 模拟器)。请注意,正则表达式语法取决于底层技术。
  • 当我在 python 脚本中运行正则表达式时,它可以正常工作。请建议我一些东西来实现我的其余目标。我什至将regexr.com 上的正则表达式与样本进行了比较,效果很好

标签: python json xml parsing web-crawler


【解决方案1】:

首先,您需要修复您的正则表达式。 \ 需要在 python 字符串中转义。 解决此问题的简单方法是改用原始字符串 r''。

regex=r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b

【讨论】:

    【解决方案2】:

    同时,经过一些小的修改(注意我正在使用 Python 3.4.2),我已经设法让它工作了:

    import urllib.request
    import re
    #htmlfile=urllib.urlopen("http://www.plainsboronj.com/content/departmental-directory")
    urls=["http://www.plainsboronj.com/content/departmental-directory"]
    i=0
    regex='[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}'
    pattern=re.compile(regex)
    print(pattern)
    while i<len(urls):
        htmlfile=urllib.request.urlopen(urls[i])
        htmltext=htmlfile.read()
        titles=re.findall(pattern,htmltext.decode())
        print(titles)
        i+=1
    

    结果是:

    ['townshipclerk@plainsboronj.com', 'acancro@plainsboronj.com',  ...]
    

    祝你好运

    【讨论】:

    • 谢谢,它已经在 python-2.7 中为我工作了。请建议我以通用方式处理姓名、电话号码、地址、链接、邮件等。所有其他信息提取和导出到 json。我知道我可以运行一个单独的单独的正则表达式,但不是这样。我需要提取所有信息并以 xml 或 json 格式存储。 TIA
    【解决方案3】:

    我认为你在这里走错了路:你有一个 HTML 文件,你试图从中提取信息。您已经开始通过过滤“@”符号来查找电子邮件地址(因此您选择使用正则表达式)来执行此操作。然而,使用正则表达式无法识别姓名、电话号码等其他内容,因此另一种方法可能有用。在 URL "https://docs.python.org/3/library/html.parser.html" 下有一些关于如何解析 HTML 文件的解释。在我看来,这将是解决您的需求的更好方法。

    【讨论】:

      猜你喜欢
      • 2014-11-30
      • 2015-10-06
      • 1970-01-01
      • 2014-05-08
      • 1970-01-01
      • 1970-01-01
      • 2013-02-12
      • 2011-06-06
      • 2023-01-03
      相关资源
      最近更新 更多