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

时间:2016-10-04 21:08:54

标签: html architecture web-scraping web-crawler

说我有会计师网站的集合,如下:

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

我想要做的就是抓取每一个并获取名称&合作伙伴的电子邮件。我应该如何在高级别处理这个问题?

假设我知道如何实际抓取每个网站(以及所有子页面)&解析HTML元素 - 我是using Oga

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

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

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

我考虑接近电子邮件的一种方法就是搜索所有mailto a个代码并从那里过滤。

明显的缺点是,无法保证电子邮件将用于合作伙伴,而不是其他员工。

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

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

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

4 个答案:

答案 0 :(得分:3)

您提供的链接主要是美国网站,所以我猜您的重点是英文名称。在这种情况下,我只是搜索整个网页的名称,而不是从html标签解析。 (There are free database of first name and last name)这可能也适用于其他欧洲公司,但这对某些国家的公司来说是个问题。以中文为例,虽然有一个固定的姓氏,但基本上可以使用任何汉字组合作为名字,所以这个解决方案不适用于中文网站。

很容易从网页上找到电子邮件,因为(用户名)@(域名)的固定格式之间没有空格。我再一次不把它当作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.

答案 1 :(得分:3)

我查看了http://ricksarassociates.com/网站,我找不到任何合作伙伴,所以在我看来,如果你不是更好地寻找其他发明,你最好从中获益。

我不时做过类似的数据编写,在挪威我们有法律 - 或者我应该说"法律" - 您不允许向人们发送电子邮件,但您可以通过电子邮件发送给公司 - 所以从另一个角度来看同样的问题。

我希望我能够熟悉数学和算法,因为我确信人工智能和机器学习中隐藏着一种迷人的解决方案,但在我看来,我能看到的唯一解决办法就是建立一个规则集,随着时间的推移可能变得相当复杂。 Maby你可以应用一些贝叶斯过滤 - 它适用于电子邮件。

但是 - 在这里要有所提高。我知道的一件事是重要的,你可以从创建爬虫环境和构建数据集开始。拥有URLS数据库,这样您就可以随时添加更多内容,并开始抓取您已经拥有的内容,以便您使用100%副本进行测试查询自己的数据。这将为您节省大量时间,而不是在调整时实时抓取。

几年前我做了自己的搜索引擎,抓取了所有的NO域,但是那时我只需要索引文件。仅仅花了一个星期的时间就把它搞砸了,我认为只有8GB的数据只是针对那个单一的文件而且我不得不使用几个代理服务器以及由于DNS traffik的问题而使它工作。需要照顾的很多问题。我想我只是说 - 如果你要大规模爬行,你可能还要开始获取数据,如果你想在以后的解析中有效工作。

祝你好运,如果得到溶剂,请发帖。我不认为没有algorythm或AI是可行的 - 人们按照他们喜欢的方式设计网站,他们从他们的屁股中取出模板,所以没有规则可循。你最终会收到不好的数据。

你有资金吗?如果是这样更简单。然后,您可以抓取每个站点,并为每个站点创建一个配置文件。您可以聘请廉价的人来手动浏览解析后的数据并删除所有错误。这可能是大多数人这样做的原因,除非有人已经这样做了,数据库是出售/可从webservice获得,因此可以将其删除。

答案 2 :(得分:1)

我已经对这些类型的页面进行了类似的抓取,并且它在各个站点之间变化很大。如果您试图让一个爬虫自动查找信息,那将很困难。但是,高级别看起来像这样。

  • 对于您检查的每个网站,查找元素模式。 Divs通常会有标签,ID和类,可以让您轻松获取信息。也许你会发现许多div都有一个特定的类名。先检查一下。
  • 通常最好从特定页面中获取太多数据,然后将其归结为您。或许,您可以通过利用类型(链接)或正则表达式(电子邮件)来查找屏幕上显示的信息,以查找格式化文本。通过这种方法更难找到名称和职业,但可能在许多页面上与其他格式良好的项目相关。
  • 名字通常会贴上敬语(Mrs.,Mr.,Dr.,JD,MD等)。你可以拿出一批这些名字,并检查他们最后的任何页面。< / LI>
  • 最后,如果你真的想让这个过程成为一般用途,你可以做一些启发式方法,根据预期信息改进你的方法;例如,名称通常位于特定列表中。如果值得花时间,您可以检查某些文本是否与更常见的名称列表匹配。

您在初始问题中提到的似乎是使用通用正则表达式抓取工具可以获得很多好处,并且您可以对其进行改进,因为您对与之交互的网站有了更多了解。

答案 3 :(得分:0)