您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

如何使用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 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调用生成的,我们可能会 我们的方法有些困难。 希望你能从中学到一些东西。让我们知道这是否有用和好 祝你好运。

python 2022/1/1 18:29:15 有207人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶