我正试图擦掉http://www.dailyfinance.com/quote/NYSE/international-business-machines/IBM/financial-ratios,但是传统的url字符串构建技术不起作用,因为“在路径中插入完整的公司名称”字符串。而确切的“公司全名”还不知道。只有公司的标志“IBM”是已知的。
实际上,我刮取的方法是循环遍历一个公司符号数组,并在将url字符串发送到urllib2.urlopen(url)之前构建它。但在这种情况下,这是做不到的。
例如,CSCO字符串是
http://www.dailyfinance.com/quote/NASDAQ/cisco-systems-inc/CSCO/financial-ratios
另一个url字符串示例是AAPL:
http://www.dailyfinance.com/quote/NASDAQ/apple/AAPL/financial-ratios
所以为了得到这个url,我必须在主页的输入框中搜索这个符号:
http://www.dailyfinance.com/
我注意到,当我键入“CSCO”并检查Firefox web开发人员网络选项卡中(http://www.dailyfinance.com/quote/NASDAQ/apple/AAPL/financial-ratios)处的搜索输入时,我注意到get请求被发送到
http://j.foolcdn.com/tmf/predictivesearch?callback=_predictiveSearch_csco&term=csco&domain=dailyfinance.com
引用者实际上给出了我想要捕获的路径
Host: j.foolcdn.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:28.0) Gecko/20100101 Firefox/28.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://www.dailyfinance.com/quote/NASDAQ/cisco-systems-inc/CSCO/financial-ratios?source=itxwebtxt0000007
Connection: keep-alive
对不起,解释太长了。所以问题是如何提取Referer中的url?如果这是不可能的,我应该如何处理这个问题?还有别的办法吗?
我真的很感谢你的帮助。
我喜欢这个问题。因此,我将给出一个非常彻底的答案。为此,我将使用我最喜欢的请求库和BeautifulSoup4。如果你真的想用的话,移植到Mechanize是你自己的事。不过,提出要求会让你省去很多麻烦。
首先,你可能在寻找一个POST请求。但是,如果搜索函数将带到您要查找的页面,则通常不需要POST请求。我们来检查一下,好吗?
当我登陆基本URL
http://www.dailyfinance.com/
时,我可以通过Firebug或Chrome的inspect工具进行一个简单的检查,当我在搜索栏上输入CSCO或AAPL并启用“跳转”时,会有一个301 Moved Permanently
状态代码。这是什么意思?简单地说,我被转移到了某处。此GET请求的URL如下:
现在,我们通过使用一个简单的URL操作来测试它是否与AAPL一起工作。
上述结果如下:
查看响应的URL是如何更改的?让我们通过在上面的代码后面附加以下内容来查找
/financial-ratios
页面,进一步执行URL操作:运行时,会得到以下结果:
现在我们走上了正轨。我现在将尝试使用BeautifulSoup解析数据。我的完整代码如下:
然后我尝试运行此代码,但遇到以下回溯错误:
值得注意的是
'NoneType' object...
行。这意味着我们的目标div
不存在!伊加斯,但我为什么要看到下面这些?!只能有一个解释:表是动态加载的!胡扯。让我们看看能否找到另一个表的源。我研究了一下页面,发现底部有滚动条。这可能意味着表是在一个框架内加载的,或者是直接从另一个源完全加载的,并放在页面的
div
中。我刷新页面并再次查看GET请求。对了,我发现了一些有希望的东西:
一个第三方来源的网址,看,它很容易操作使用股票代码!我们试着把它放进一个新的标签页。我们得到的是:
哇!我们现在有了非常准确的数据来源。不过,最后一个障碍是,当我们尝试使用此字符串提取CSCO数据时,它是否有效(请记住,我们使用了CSCO->;AAPL,现在再次返回CSCO,所以您不会感到困惑)。让我们把字符串清理干净,在这里完全抛弃
www.dailyfinance.com
的角色。我们的新网址如下:让我们试着在最后一个刮刀上使用它!
我们对中信建投(国际)财务比率数据的原始结果如下:
清理数据取决于你。
从这一擦边球中可以学到的一个好教训是,并非所有数据都单独包含在一个页面中。很高兴看到它来自另一个静态站点。如果它是通过JavaScript或AJAX调用等方式生成的,那么我们的方法可能会有一些困难。
希望你能从中学到一些东西。如果有帮助,请告诉我们,祝你好运。
不回答你的具体问题,而是解决你的问题。
http://www.dailyfinance.com/quotes/{Company Symbol}/{Stock Exchange}
示例:
http://www.dailyfinance.com/quotes/AAPL/NAS
http://www.dailyfinance.com/quotes/IBM/NYSE
http://www.dailyfinance.com/quotes/CSCO/NAS
要进入财务比率页面,您可以采用以下方法:
示例:
相关问题 更多 >
编程相关推荐