Html 从金融网站中提取文章URL

Html 从金融网站中提取文章URL,html,regex,xpath,yahoo-finance,Html,Regex,Xpath,Yahoo Finance,所以这篇文章在a**中真的很痛苦。我正在写一个需要雅虎财经文章URL的程序。更简单的说,假设我正在尝试从雅虎财经获取以下文章的URL 起初,我尝试使用Xpath来获取所有的LI、a、ul、ol标记,但都失败了。它给了我错误的URL,而不是文章的URL。 所以我转向正则表达式-我使用Expresso库中的模式作为URL,只是为了记录,模式如下(?\w+):\/\/(?[\w@][\w.:@]+)\/?[\w\.?=%&=\-@/$,]*。同样失败。。。 然后,我使用simle CNTR+F在主H

所以这篇文章在a**中真的很痛苦。我正在写一个需要雅虎财经文章URL的程序。更简单的说,假设我正在尝试从雅虎财经获取以下文章的URL

起初,我尝试使用Xpath来获取所有的LI、a、ul、ol标记,但都失败了。它给了我错误的URL,而不是文章的URL。 所以我转向正则表达式-我使用Expresso库中的模式作为URL,只是为了记录,模式如下
(?\w+):\/\/(?[\w@][\w.:@]+)\/?[\w\.?=%&=\-@/$,]*
。同样失败。。。 然后,我使用simle CNTR+F在主HTML源代码中搜索一篇文章的URL,然后使用WT*!它不在那里?这很奇怪-HTML源代码不应该包含页面的所有数据吗

  • 我的主要问题是,有没有办法通过使用常规方法(Regex,Xpath)来获取这些URL,因为文章的URL不在HTML源代码中
我知道这是一个很难回答的问题,也不是很有针对性,但我读了至少10万个关于这个主题的问题,却没有发现任何可以帮助我的东西……所以我很乐意得到任何帮助。谢谢:)
注意:我正在使用vb.net语言和HtmlAgilityPack检索html代码。图像取自

,如果页面内容是动态生成的,则最好使用cookie或其他与会话相关的内容呈现页面
您可以使用CURL或phantomJS获取完整的html页面。

获取完整页面后,可以使用正则表达式提取URL。

尝试这样刮取门户是一个非常糟糕的主意。您应该尝试以另一种格式获取相同的数据,例如RSS,它是XML,您可以使用XPath轻松提取数据。作为大多数新闻门户网站,雅虎提供了许多RSS格式的数据选项。通过在他们的页面中简单搜索主题,您应该可以找到一些链接

这是我在RSS中搜索雅虎财务时发现的一个页面:

这是您将从该链接获得的XML文件的一部分:

<rss version="2.0">
    <channel>
        <title>Yahoo! Finance: Top Stories</title>
        <link>http://biz.yahoo.com/top.html</link>
        <description>Top Stories from Yahoo! Finance</description>
        <language>en-us</language>
        <lastBuildDate>Fri, 13 Jun 14 16:55:08 GMT</lastBuildDate>
        <image>...</image>
        <item>
            <title>Oil’s rise not just about Iraq turmoil</title>
            <link>
                http://us.rd.yahoo.com/finance/news/rss/story/SIG=15hovs6uo/*http%3A//us.rd.yahoo.com/finance/news/topfinstories/SIG=13e3917ka/*http%3A//finance.yahoo.com/blogs/daily-ticker/oil-s-hitting--130-a-barrel-by-2015--dan-dicker-141207816.html?l=1
            </link>
            <description>
                Dan Dicker, author of "Oil's Endless Bid," tells The Daily Ticker why unrest in Iraq is just one reason oil prices are destined to keep rising.
            </description>
            <guid isPermaLink="false">yahoo_finance/102194239</guid>
            <pubDate>Fri, 13 Jun 14 16:55:08 GMT</pubDate>
        </item>
        <item>
            <title>Struggling retailers look like buyout bait</title>
            <link>
                http://us.rd.yahoo.com/finance/news/rss/story/SIG=15kinjdvj/*http%3A//us.rd.yahoo.com/finance/news/topfinstories/SIG=13h3m0qn0/*http%3A//finance.yahoo.com/blogs/breakout/struggling-mall-retailers-are-looking-like-buyout-bait-141750824.html?l=1
            </link>
            <description>
                One subset of retailers has been so spurned by investors that they are stuffed with idle cash and appear cheap enough for some opportunistic and risk-embracing buyout firms to begin taking a look.
            </description>
            <guid isPermaLink="false">yahoo_finance/1823439360</guid>
            <pubDate>Fri, 13 Jun 14 16:55:07 GMT</pubDate>
        </item>
   ...
您可以得到以下列表:

石油的崛起不仅仅是因为伊拉克动乱
苦苦挣扎的零售商看起来像是收购诱饵
美国政府称将向花旗集团寻求100亿美元
...

您还应该检查此链接:它为希望使用RSS数据的开发人员提供了信息。

听起来内容要么加载了javascript,要么加载了iframe(如果中断了您的路径)。绝对不推荐使用正则表达式。您是如何使用XPath的,使用哪种语言?网页的URL是什么?更新了问题。也许你应该检查是否有RSS或Atom新闻源。这比尝试用生成的代码刮取门户页面要简单得多。问题是网站的HTML源代码不包含这些URL,因为它们指向不同的网页。获取HTML数据不是问题。我不想专门谈论工具,但我在这里会破例。PhantomJS就像浏览器一样工作,终端站点无法将其与普通浏览器区分开来。呈现url后,您就可以获取页面的html。这应该包含您在浏览器中看到的所有数据。但是为什么我需要使用PhantomJS?我不能通过HtmlAgilityPack加载html,然后使用Regex??为什么html源代码不包含这些URL?好吧!您无法通过获取源代码获取所有url的原因可能有很多。该页面显然是动态的,它可能会进行许多添加DOM的异步调用,这取决于您的位置(IP地址)、个人设置、缓存和cookies等参数。一个简单的Webrequest、Webresponse和Streamreader将在动态页面上工作?非常感谢您的精彩回答!。。。最后一件事…如果你不介意,maybee你可以给我所有财经新闻的rss页面的URL,而不仅仅是头条新闻,或者更好的,告诉我你是如何找到头条新闻rss的这个特定URL的:)我搜索了Yahoo rss提要,得到了this://developer.yahoo.com/rss/ 它有几个雅虎页面的RSS链接(点击[RSS]图标)。另见和
//item/title