如何构建动态Web爬网程序/爬网程序:Python

时间:2018-07-03 06:10:15

标签: python web-scraping web-crawler financial data-retrieval

不太确定这个问题的复杂性,但想一想。

如何创建网络抓取工具/抓取工具(不确定我需要哪个),以获取所有CEO薪酬比率数据的csv。 https://www.bloomberg.com/graphics/ceo-pay-ratio/

我希望此信息用于进一步分析,但是,我不确定如何为动态网页检索该信息。过去,我只是为简单的网站和功能构建了Web抓取工具。

如果您可以为我提供良好的资源或在下面发布代码,我将永远怀念您。

提前谢谢!

2 个答案:

答案 0 :(得分:0)

由于该网站似乎是动态加载内容,所以我相信您将需要Selenium(一个可自动执行浏览器的库)和BeautifulSoup(一个可解析生成的网页的库)。

由于您感兴趣的网站部分只是一页,因此您只需要检索数据,我建议您首先研究如何将数据加载到页面上。可以用与脚本相同的参数直接向其服务器发出请求,以直接检索您感兴趣的数据。

要发出这样的请求,您可以考虑使用另一个名为requests的库。

答案 1 :(得分:0)

请注意,抓取该网站可能会标记为“ 违反服务条款”,该特定网站使用多种技术来避免基于脚本引擎进行抓取。


如果您查看网页,则可能会发现单击下一步按钮时没有XHR请求。因此,您可以推断出内容只能加载一次。

如果按大小对请求数据进行排序,则会发现所有数据都是从json file加载的。


使用python(但是您需要在运行python脚本之前打开页面):

import requests
data=requests.get("https://www.bloomberg.com/graphics/ceo-pay-ratio/live-data/ceo-pay-ratio/live/data.json").json()
for each in data['companies']:
    try:
        print "Company",each['c'],"=> CEO pay ratio",each['cpr']
    except:
        print "Company",each['c'],"=> no CEO pay ratio !"

哪个给你:

Company Aflac Inc => CEO pay ratio 300
Company American Campus Communities Inc => CEO pay ratio 226
Company Aetna Inc => CEO pay ratio 235
Company Ameren Corp => CEO pay ratio 66
Company AmerisourceBergen Corp => CEO pay ratio 0
Company Advance Auto Parts Inc => CEO pay ratio 329
Company American International Group Inc => CEO pay ratio 697
Company Arthur J Gallagher & Co => CEO pay ratio 126
Company Arch Capital Group Ltd => CEO pay ratio 104
Company ACADIA Pharmaceuticals Inc => CEO pay ratio 54
[...]

与尝试请求网站相比,在Webrowser中打开json,然后将其保存在本地可能更好。

在本地将json保存为data.json后,您可以使用以下命令进行读取:

import json

with open("data.json","r") as f:
    cont=f.read()

data=json.loads(cont)

for each in data['companies']:
    try:
        print "Company",each['c'],"=> CEO pay ratio",each['cpr']
    except:
        print "Company",each['c'],"=> no CEO pay ratio !"