解析网站并获取我需要的信息

时间:2010-01-14 17:03:44

标签: html xml parsing

嗨所以我需要检索我在nytimes.com上搜索的第一篇文章的网址

所以,如果我搜索Apple。此链接将返回结果

http://query.nytimes.com/search/sitesearch?query=Apple&srchst=cse

您只需将Apple替换为您要搜索的字词。

如果您点击该链接,您会看到NYtimes询问您是否指Apple Inc.

我想获取此链接的网址,然后转到它。

然后您将获得有关Apple Inc的大量信息。

如果向下滚动,您将看到与Apple相关的文章。

所以我最终想要的是本页第一篇文章的网址。

所以我真的不知道如何解决这个问题。我使用Java,还是使用什么?我将非常感谢任何帮助,稍后我会对此表示赞赏,但我需要尽快给出答案。

由于

编辑:我们可以用Java做到这一点吗?

3 个答案:

答案 0 :(得分:1)

您可以将Python与标准urllib模块一起使用来获取页面和优秀的HTML解析器BeautifulSoup,以便从页面中获取所需的信息。

documentation of BeautifulSoup开始,这里是一个示例代码,用于获取网页并从中提取一些信息:

import urllib2
from BeautifulSoup import BeautifulSoup

page = urllib2.urlopen("http://www.icc-ccs.org/prc/piracyreport.php")
soup = BeautifulSoup(page)
for incident in soup('td', width="90%"):
    where, linebreak, what = incident.contents[:3]
    print where.strip()
    print what.strip()
    print

这篇this is一篇关于这个主题的精彩而详细的文章。

答案 1 :(得分:0)

您可以使用HTML Agility Pack 在C#中执行此操作,或者如果站点是有效的XHTML ,则使用LINQ to XML。 编辑:它无效XHTML;我查了一下。

以下(已测试)代码将获取第一个搜索结果的网址:

var doc = new HtmlWeb().Load(@"http://query.nytimes.com/search/sitesearch?query=Apple&srchst=cse");
var url = HtmlEntity.DeEntitize(doc.DocumentNode.Descendants("ul")
                                 .First(ul => ul.Attributes["class"] != null 
                                           && ul.Attributes["class"].Value == "results")
                                 .Descendants("a")
                                 .First()
                                 .Attributes["href"].Value);

请注意,如果他们的网站发生变化,此代码可能会停止工作。

答案 2 :(得分:0)

你当然可以用Java做到这一点。看看HttpURLConnection类。基本上,你给它一个URL,调用connect函数,然后你得到一个带有页面内容的输入流,即HTML文本。然后,您可以处理它并解析出您想要的任何信息。

您正在描述的项目面临两个挑战。第一个,也可能是真正较小的挑战,是找出如何连接到网页并掌握程序中的文本的机制。第二个可能更大的挑战是如何从该文本中提取您想要的信息。我不清楚你的要求的详细信息,但你将不得不整理大量的文字来找到你正在寻找的东西。如果没有真正关注纽约时报的网站,我肯定它有各种各样的装饰,如漂亮的图片,公司标识和标题等等,然后会有菜单和广告以及各种各样的东西。我真诚地怀疑纽约时报或几乎任何其他商业网站都会返回一个搜索页面,其中只包含您感兴趣的文章的链接。不知何故,您的程序必须弄清楚第一个链接是“订阅在线”页面,第二个是广告,第三个是客户服务,第四个和第五个是附加广告,第六个是到主页等等,直到你最终到达你实际的那个感兴趣的。您将如何识别有趣的链接?可能有标题或格式使人类可以识别它,但你使用很多直觉来筛选出难以在程序中重现的混乱。

祝你好运!