如果我有一组随机网站,我如何从每个网站获取具体信息?

mar*_*ion 7 html architecture web-crawler web-scraping

假设我有会计师网站的集合,如下所示:

http://www.johnvanderlyn.com
http://www.rubinassociatespa.com
http://www.taxestaxestaxes.com
http://janus-curran.com
http://ricksarassociates.com
http://www.condoaudits.com
http://www.krco-cpa.com
http://ci.boca-raton.fl.us
Run Code Online (Sandbox Code Playgroud)

我想要做的是抓取每个并获取合作伙伴的名称和电子邮件.我应该如何在高层次上解决这个问题?

假设我知道如何实际抓取每个网站(以及所有子页面)并解析HTML元素 - 我正在使用Oga.

我正在努力解决的是如何理解以各种方式呈现的数据.例如,公司(和/或合作伙伴)的电子邮件地址可以通过以下方式之一找到:

  • 在"关于我们"页面上,在合作伙伴的名称下.
  • 在"关于我们"页面上,作为通用的全能电子邮件.
  • 在"团队"页面上,以合作伙伴的名义.
  • 在"联系我们"页面上,作为通用的全能电子邮件.
  • 在合作伙伴的页面上,以合作伙伴的名义.

或者它可以是任何其他方式.

我正在考虑接近电子邮件的一种方法是搜索所有mailto a标签并从那里过滤.

明显的缺点是,不能保证电子邮件将是合作伙伴而不是其他员工.

另一个更明显的问题是仅从标记中检测伙伴名称.我最初认为我可以在其中提取所有标题标记和文本,但我偶然发现了一些span标记中包含合作伙伴名称的网站.

我知道这通常是针对特定的编程问题,但我不知道如何处理这个以及在哪里问这个问题.是否有另一个StackExchange网站,这个问题更适合?

关于你可以给我的具体方向的任何建议都会很棒.

cyt*_*nny 3

您提供的链接主要是美国网站,所以我猜您主要关注英文名称。在这种情况下,我不会从 html 标签解析,而是在整个网页中搜索名称。(有免费的名字和姓氏数据库)如果您为其他一些欧洲公司执行此操作,这也可能有效,但对于某些国家的公司来说这将是一个问题。以中文为例,虽然有一组固定的姓氏,但基本上可以使用汉字的任意组合作为名字,因此该解决方案不适用于中文网站。

从网页上查找电子邮件很容易,因为有固定格式(用户名)@(域名),中间没有空格。同样,我不会将其视为 html 标签,而只是将其视为普通字符串,以便无论电子邮件是在 mailto 标签中还是纯文本中,都可以找到。然后,确定它是什么电子邮件:

Only one email in page?
    Yes -> catch-all email.
    No -> Is name found in that page as well?
        No -> catch-all email (can have more than one catch-all email, maybe for different purpose like info + employment)
        Yes ->  Email should be attached to the name found right before it. It is normal that the name should appear before the email.
                Then, it should be safe to assume the name appear first belongs to more important member, e.g. Chairman or partner.
Run Code Online (Sandbox Code Playgroud)