如何使用Python动态生成url来抓取页面?

如何使用Python动态生成url来抓取页面?,第1张

如何使用Python动态生成url来抓取页面

我喜欢这个问题。正因为如此,我会给出一个非常彻底的答案。
为此,我将使用我最喜欢的请求库和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 rqapl_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/aaplhttp://www.dailyfinance.com/quote/nasdaq/apple/aapl/financial-ratios[Finished in 6.0s]

现在我们在正确的轨道上。我现在将尝试使用
美丽的群像。我的完整代码如下:

from bs4 import BeautifulSoup as bsoupimport requests as rqapl_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").tablerows = table.find_all("tr")for row in rows:    print row

然后我尝试运行这段代码,结果遇到了以下错误
回溯:

  File "C:UsersnanashiDesktoptest.py", line 13, in <module>    div = soup.find("div", id="clear").tableAttributeError: '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 bsoupimport requests as rqcsco_tick = "CSCO"url = "http://www.motleyfool.idmanagedsolutions.com/stocks/financial_ratios.idms?SYMBOL_US="new_url = url + csco_tickr = rq.get(new_url)soup = bsoup(r.content)table = soup.find("div", id="clear").tablerows = 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:

CompanyIndustryValuation RatiosP/E Ratio (TTM)15.4014.80P/E High - Last 5 Yrs 24.0028.90P/E Low - Last 5 Yrs8.4012.10Beta1.371.50Price to Sales (TTM)2.512.59Price to Book (MRQ)2.142.17Price to Tangible Book (MRQ)4.253.83Price to Cash Flow (TTM)11.4011.60Price to Free Cash Flow (TTM)28.2060.20DividendsDividend Yield (%)3.302.50Dividend Yield - 5 Yr Avg (%)N.A.1.20Dividend 5 Yr Growth Rate (%)N.A.144.07Payout Ratio (TTM)45.0032.00Sales (MRQ) vs Qtr 1 Yr Ago (%)-7.80-3.70Sales (TTM) vs TTM 1 Yr Ago (%)5.505.60Growth Rates (%)Sales - 5 Yr Growth Rate (%)5.515.12EPS (MRQ) vs Qtr 1 Yr Ago (%)-54.50-51.90EPS (TTM) vs TTM 1 Yr Ago (%)-54.50-51.90EPS - 5 Yr Growth Rate (%)8.919.04Capital Spending - 5 Yr Growth Rate (%)20.3020.94Financial StrengthQuick Ratio (MRQ)2.402.70Current Ratio (MRQ)2.602.90LT Debt to Equity (MRQ)0.220.20Total Debt to Equity (MRQ)0.310.25Interest Coverage (TTM)18.9019.10Profitability Ratios (%)Gross Margin (TTM)63.2062.50Gross Margin - 5 Yr Avg66.3064.00EBITD Margin (TTM)26.2025.00EBITD - 5 Yr Avg28.820.00Pre-Tax Margin (TTM)21.1020.00Pre-Tax Margin - 5 Yr Avg21.6018.80Management Effectiveness (%)Net Profit Margin (TTM)17.1017.65Net Profit Margin - 5 Yr Avg17.9015.40Return on Assets (TTM)8.308.90Return on Assets - 5 Yr Avg8.908.00Return on Investment (TTM)11.9012.30Return on Investment - 5 Yr Avg12.5010.90EfficiencyRevenue/Employee (TTM)637,890.00556,027.00Net Income/Employee (TTM)108,902.0098,118.00Receivable Turnover (TTM)5.705.80Inventory Turnover (TTM)11.309.70Asset Turnover (TTM)0.500.50[Finished in 2.0s]

清理数据由你决定。


从这次擦肩而过中学到的一个很好的教训是,并非所有的数据都包含在一个数据库中
单独呼叫。很高兴看到它来自另一个静态站点。如果它
是通过Javascript或AJAX调用等生成的,我们可能会
我们的方法有些困难。
希望你能从中学到一些东西。让我们知道这是否有用和好
祝你好运。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5631095.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存