我想刮<http://www.dailyfinance.com/quote/NYSE/international-business machines/IBM/financial ratios>
,但传统的url字符串
构建技术不起作用,因为在-
路径“字符串。而确切的“公司全名”事先也不得而知。
只有公司符号“IBM”是已知的。
从本质上说,我刮的方式是通过循环遍历一组公司符号
并在将其发送到urllib2.urlopen(url)之前构建url字符串。但是在
这个案子,那是办不到的。
例如,CSCO字符串
http://www.dailyfinance.com/quote/NASDAQ/cisco-systems-inc/CSCO/financial-ratios
and another example url string is AAPL:
http://www.dailyfinance.com/quote/NASDAQ/apple/AAPL/financial-ratios
So in order to get the url, I had to search the symbol in the input box on the
main page:
http://www.dailyfinance.com/
我注意到,当我键入“CSCO”并检查
(<http://www.dailyfinance.com/quote/NASDAQ/apple/AAPL/financial-ratio>
在
firefoxwebdevelopernetwork
选项卡上,我注意到get请求正在发送
到
http://j.foolcdn.com/tmf/predictivesearch?callback=_predictiveSearch_csco&term=csco&domain=dailyfinance.com
and that the referer actually gives the path that I want to capture
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
抱歉,解释得太长了。所以问题是如何在
推荐人?如果这是不可能的,我应该如何处理这个问题?是
还有别的办法吗?
我真的很感谢你的帮助。
我喜欢这个问题。正因为如此,我会给出一个非常彻底的答案。
为此,我将使用我最喜欢的请求库和BeautifulSoup4。
移植到Mechanize,如果你真的想使用,这取决于你。
不过,请求可以帮你省去很多麻烦。
首先,你可能在寻找一个POST请求。但是,POST请求
如果搜索功能将您带到页面,则通常不需要
你在找什么。让我们检查一下,好吗?
当我登陆基本网址时http://www.dailyfinance.com/
,我可以做一个简单的
检查通过Firebug或Chrome的检查工具,当我把CSCO或AAPL上
在搜索栏中,启用“跳转”,就会出现“301永久移动”的状态
代码。这是什么意思?
简单地说,我被调往某处。此GET的URL
请求如下:
http://www.dailyfinance.com/quote/jump?exchange-input=&ticker-input=CSCO
Now, we test if it works with AAPL by using a simple URL manipulation.
import requests as rq
apl_tick = "AAPL"
url = "http://www.dailyfinance.com/quote/jump?exchange-input=&ticker-input="
r = rq.get(url + apl_tick)
print r.url
The above gives the following result:
http://www.dailyfinance.com/quote/nasdaq/apple/aapl
[Finished in 2.3s]
查看响应的URL是如何更改的?让我们看一下URL操作
进一步查找“/财务比率”页,方法是在
以下为上述代码:
new_url = r.url + "/financial-ratios"
p = rq.get(new_url)
print p.url
When ran, this gives is the following result:
http://www.dailyfinance.com/quote/nasdaq/apple/aapl
http://www.dailyfinance.com/quote/nasdaq/apple/aapl/financial-ratios
[Finished in 6.0s]
现在我们在正确的轨道上。我现在将尝试使用
美丽的群像。我的完整代码如下:
from bs4 import BeautifulSoup as bsoup
import requests as rq
apl_tick = "AAPL"
url = "http://www.dailyfinance.com/quote/jump?exchange-input=&ticker-input="
r = rq.get(url + apl_tick)
new_url = r.url + "/financial-ratios"
p = rq.get(new_url)
soup = bsoup(p.content)
div = soup.find("div", id="clear").table
rows = table.find_all("tr")
for row in rows:
print row
然后我尝试运行这段代码,结果遇到了以下错误
回溯:
File "C:\Users\nanashi\Desktop\test.py", line 13, in <module>
div = soup.find("div", id="clear").table
AttributeError: 'NoneType' object has no attribute 'table'
值得注意的是行“NoneType”对象…`。这意味着我们的目标是div
不存在!伊加兹,但为什么我会看到下面这些?!
只能有一种解释:表是动态加载的!胡扯。
让我们看看能不能为这张表找到另一个来源。我研究网页
请注意底部有滚动条。这可能意味着桌子
是在一个帧内加载的还是完全从另一个源直接加载的
并放入页面的“div”中。
我刷新页面并再次查看GET请求。答对了,我发现了一些东西
这似乎有点前途:
一个第三方源URL,看,它很容易操作使用股票代码
符号!让我们试着把它加载到一个新的选项卡中。
真 的!我们现在有了非常准确的数据来源。最后一个障碍是
当我们尝试使用这个字符串提取CSCO数据时,它会工作吗(记住我们
转到CSCO->AAPL,现在又回到CSCO,所以您不会感到困惑)。让我们
清理串沟的作用www.dailyfinance.com
这里
完全。我们的新网址如下:
http://www.motleyfool.idmanagedsolutions.com/stocks/financial_ratios.idms?SYMBOL_US=AAPL
Let’s try using that in our final scraper!
from bs4 import BeautifulSoup as bsoup
import requests as rq
csco_tick = "CSCO"
url = "http://www.motleyfool.idmanagedsolutions.com/stocks/financial_ratios.idms?SYMBOL_US="
new_url = url + csco_tick
r = rq.get(new_url)
soup = bsoup(r.content)
table = soup.find("div", id="clear").table
rows = table.find_all("tr")
for row in rows:
print row.get_text()
And our raw results for CSCO’s financial ratios data is as follows:
Company
Industry
Valuation Ratios
P/E Ratio (TTM)
15.40
14.80
P/E High - Last 5 Yrs
24.00
28.90
P/E Low - Last 5 Yrs
8.40
12.10
Beta
1.37
1.50
Price to Sales (TTM)
2.51
2.59
Price to Book (MRQ)
2.14
2.17
Price to Tangible Book (MRQ)
4.25
3.83
Price to Cash Flow (TTM)
11.40
11.60
Price to Free Cash Flow (TTM)
28.20
60.20
Dividends
Dividend Yield (%)
3.30
2.50
Dividend Yield - 5 Yr Avg (%)
N.A.
1.20
Dividend 5 Yr Growth Rate (%)
N.A.
144.07
Payout Ratio (TTM)
45.00
32.00
Sales (MRQ) vs Qtr 1 Yr Ago (%)
-7.80
-3.70
Sales (TTM) vs TTM 1 Yr Ago (%)
5.50
5.60
Growth Rates (%)
Sales - 5 Yr Growth Rate (%)
5.51
5.12
EPS (MRQ) vs Qtr 1 Yr Ago (%)
-54.50
-51.90
EPS (TTM) vs TTM 1 Yr Ago (%)
-54.50
-51.90
EPS - 5 Yr Growth Rate (%)
8.91
9.04
Capital Spending - 5 Yr Growth Rate (%)
20.30
20.94
Financial Strength
Quick Ratio (MRQ)
2.40
2.70
Current Ratio (MRQ)
2.60
2.90
LT Debt to Equity (MRQ)
0.22
0.20
Total Debt to Equity (MRQ)
0.31
0.25
Interest Coverage (TTM)
18.90
19.10
Profitability Ratios (%)
Gross Margin (TTM)
63.20
62.50
Gross Margin - 5 Yr Avg
66.30
64.00
EBITD Margin (TTM)
26.20
25.00
EBITD - 5 Yr Avg
28.82
0.00
Pre-Tax Margin (TTM)
21.10
20.00
Pre-Tax Margin - 5 Yr Avg
21.60
18.80
Management Effectiveness (%)
Net Profit Margin (TTM)
17.10
17.65
Net Profit Margin - 5 Yr Avg
17.90
15.40
Return on Assets (TTM)
8.30
8.90
Return on Assets - 5 Yr Avg
8.90
8.00
Return on Investment (TTM)
11.90
12.30
Return on Investment - 5 Yr Avg
12.50
10.90
Efficiency
Revenue/Employee (TTM)
637,890.00
556,027.00
Net Income/Employee (TTM)
108,902.00
98,118.00
Receivable Turnover (TTM)
5.70
5.80
Inventory Turnover (TTM)
11.30
9.70
Asset Turnover (TTM)
0.50
0.50
[Finished in 2.0s]
清理数据由你决定。
从这次擦肩而过中学到的一个很好的教训是,并非所有的数据都包含在一个数据库中
单独呼叫。很高兴看到它来自另一个静态站点。如果它
是通过JavaScript或AJAX调用等生成的,我们可能会
我们的方法有些困难。
希望你能从中学到一些东西。让我们知道这是否有用和好
祝你好运。
问题内容: [我想做的事] 刮擦下面的网页以获取二手车数据。 http://www.goo- net.com/php/search/summary.php?price_range=&pref_c=08,09,10,11,12,13,14&easysearch_flg=1 [问题] 刮整个页面。在上面的网址中,仅显示前30个项目。我可以在下面编写的代码中删除这些内容。指向其他页面的链接显示为1 2
问题内容: 我正在抓取一个可能包含很多的网站,例如: 我想像一样填充,并像在爬网期间那样从URL中提取项目。 我可以用来实现此功能吗?以及如何在抓取过程中动态生成? 问题答案: 动态生成URL的最佳方法是重写Spider 的方法:
问题内容: 在网站上,有在标顶部的几个环节,,,和。如果按下以数字标记的链接,它将动态地将一些数据加载到content中。如果被按下,它会用标签页,,,和第4页中的数据显示。 我想从按下的所有链接的内容中抓取数据(我不知道有多少,一次只显示3个,然后) 请举一个例子。例如,考虑网站www.cnet.com。 请指导我下载使用selenium的一系列页面,并自行解析它们以处理漂亮的汤。 问题答案:
我有一个网站,我想自动执行一些操作,但页面是由2个JavaScript文件生成的,在html中定义如下: 运行时。js大约有70行代码和应用程序。js大约有4万行。。。我不知道如何阅读代码,因为我不懂任何JavaScript,我的Pyton知识也不过是一点点而已;) 我想分享这个特定的网站,但这个页面是在登录之后的。因此,我已经设法使用两种不同的方法进入页面,但在JS生成的下一个页面中找不到按下按
问题内容: 我需要用python抓取网站。我使用urlib模块获取了源html代码,但是我还需要抓取由javascript函数(包含在html源代码中)生成的html代码。该功能在站点中的作用是,当您按下按钮时,它会输出一些html代码。如何使用python代码“按”此按钮?可以帮助我吗?我用firebug捕获了POST请求,但是当我尝试在url上传递它时,出现403错误。有什么建议么? 问题答案
问题内容: 我有一个webBrowser,在Visual Studio中有一个标签,基本上我想做的是从另一个网页中抓取一个部分。 我尝试使用WebClient.DownloadString和WebClient.DownloadFile,在JavaScript加载内容之前,它们都为我提供了网页的源代码。我的下一个想法是使用WebBrowser工具,并在页面加载后仅调用webBrowser.Docum
问题内容: 我正在尝试抓取一个网站,但我没有得到某些要素,因为这些要素是动态创建的。 我在node.js中使用了cheerio,下面是我的代码。 此代码返回空响应,因为加载页面时,该页面为空。 内容尚未添加。 如何使用node.js获取这些元素?如何抓取具有动态内容的页面? 问题答案: 干得好;
问题内容: 我正在尝试开发一个简单的网页抓取工具。我想提取没有代码的文本。我实现了这个目标,但是我发现在某些加载了的页面中,我没有获得良好的结果。 例如,如果一些代码添加了一些文本,则看不到它,因为当我调用 我得到的原始文本没有添加文本(因为在客户端执行了)。 因此,我正在寻找一些解决此问题的想法。 问题答案: 一旦安装了,请确保二进制文件在当前路径中可用: 例 举个例子,我用以下HTML代码创建