爬取世界各国历年的GDP数据

写在前面: 我是「虐猫人薛定谔i」,一个不满足于现状,有梦想,有追求的00后
\quad
本博客主要记录和分享自己毕生所学的知识,欢迎关注,第一时间获取更新。
\quad
不忘初心,方得始终。
\quad

❤❤❤❤❤❤❤❤❤❤

文章目录

  • 思路分析
  • 代码
  • 结果
  • 总结

爬取世界各国历年的GDP数据_第1张图片

思路分析

今天,要爬取的是世界各国历年的GDP数据 O(∩_∩)O哈哈~
爬取世界各国历年的GDP数据_第2张图片
这个网站有1960年到2018年的GDP数据,要爬取的国家如下:

按国家/地区查询历年数据
亚洲
中国 香港 澳门 新加坡 日本 泰国 菲律宾 韩国 马来西亚 越南 印尼 柬埔寨 老挝 缅甸 巴基斯坦 斯里兰卡 尼泊尔 印度 马尔代夫 蒙古 孟加拉 约旦 巴勒斯坦 沙特阿拉伯 黎巴嫩 也门 叙利亚 哈萨克斯坦 土库曼斯坦 格鲁吉亚 阿富汗 塔吉克斯坦 不丹 以色列 东帝汶 阿曼 文莱 卡塔尔 阿塞拜疆 乌兹别克斯坦 科威特 伊拉克 伊朗 吉尔吉斯斯坦 阿联酋 巴林 亚美尼亚
欧洲
英国 德国 法国 比利时 意大利 西班牙 葡萄牙 瑞士 冰岛 奥地利 捷克 匈牙利 波兰 希腊 俄罗斯 土耳其 保加利亚 罗马尼亚 斯洛文尼亚 克罗地亚 圣马力诺 芬兰 列支敦士登 马耳他 荷兰 黑山 白俄罗斯 安道尔 拉脱维亚 挪威 卢森堡 马其顿 摩尔多瓦 立陶宛 法罗群岛 丹麦 马恩岛 阿尔巴尼亚 塞尔维亚 乌克兰 斯洛伐克 塞浦路斯 波黑 爱沙尼亚 爱尔兰 摩纳哥 瑞典
美洲
美国 加拿大 委内瑞拉 玻利维亚 波多黎各 尼加拉瓜 巴拉圭 智利 圣基茨和尼维斯 牙买加 乌拉圭 特克斯和凯科斯群岛 多米尼克 圭亚那 哥斯达黎加 圣文森特和格林纳丁斯 特立尼达和多巴哥 百慕大 伯利兹 格林纳达 格陵兰 海地 墨西哥 圣卢西亚 安提瓜和巴布达 洪都拉斯 多米尼加 秘鲁 苏里南 哥伦比亚 厄瓜多尔 库拉索 危地马拉 巴巴多斯 巴西 开曼群岛 萨尔瓦多 阿鲁巴 巴拿马 阿根廷 巴哈马 古巴
大洋洲
澳大利亚 新西兰 基里巴斯 法属波利尼西亚 关岛 北马里亚纳群岛 马绍尔群岛 斐济群岛 密克罗尼西亚联邦 瓦努阿图 美属萨摩亚 帕劳 萨摩亚 图瓦卢 汤加 巴布亚新几内亚 所罗门群岛 新喀里多尼亚 瑙鲁
非洲
南非 埃及 安哥拉 阿尔及利亚 尼日尔 纳米比亚 加纳 佛得角 利比里亚 毛里求斯 利比亚 坦桑尼亚 博茨瓦纳 布基纳法索 毛里塔尼亚 塞拉利昂 吉布提 几内亚 塞舌尔 刚果(金) 贝宁 尼日利亚 多哥 喀麦隆 摩洛哥 乍得 布隆迪 莱索托 莫桑比克 津巴布韦 刚果(布) 埃塞俄比亚 科摩罗 圣多美和普林西比 马达加斯加 塞内加尔 卢旺达 赞比亚 冈比亚 南苏丹 肯尼亚 突尼斯 科特迪瓦 赤道几内亚 几内亚比绍 斯威士兰 中非 索马里 厄立特里亚 加蓬 马拉维 马里 苏丹 乌干达

差不多世界上的国家都全了!
爬取世界各国历年的GDP数据_第3张图片

下面进行思路分析,废话不多说,直接上F12,可以发现数据在网页的源码中,这就好办了。
爬取世界各国历年的GDP数据_第4张图片
请求相应的页面,拿到源码后,从源码中提取数据就行了。

# 中国对应的URL
https://www.kylc.com/stats/global/yearly_per_country/g_gdp/chn.html

在这里插入图片描述

对于其它国家的数据,我们只需要构造对应的URL即可。

代码

import requests
import time
import csv
from lxml import etree


# 起始URL
url = 'https://www.kylc.com/stats/global/yearly_per_country/g_gdp/chn.html'
# 伪装请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36'
}

# 保存数据
def save_data(data, name):
    header = ['year', 'GDP', 'rate']
    f = open('./result/GDP/'+name+'.csv', 'w', newline='')
    f_csv = csv.DictWriter(f, header)
    f_csv.writeheader()
    f_csv.writerows(data)
    f.close()


# 解析数据
def parse_data(html, name):
    data_list = []
    tr_list = html.xpath('//div[@class="table-responsive"]/table/tbody/tr')
    for tr in tr_list:
        data = tr.xpath('./td/text()')
        if len(data) == 3:
            year = data[0]
            gdp = data[1]
            rate = data[2]
            item = {
                'year': year,
                'GDP': gdp,
                'rate': rate,
            }
            data_list.append(item)
            # print(item)
    save_data(data_list, name)


def main():
    r = requests.get(url, headers=headers)
    r.encoding='utf-8'
    html = etree.HTML(r.text)
    parse_data(html, 'chn')
    print('chn is OK!')
    ul_list = html.xpath('//div[@class="col-md-3"]/div[last()]/div[@class="panel-body"]/ul')
    for ul in ul_list:
        li_list = ul.xpath('./li')
        for li in li_list:
            a = ''.join(li.xpath('./a/@href'))
            name = a.split('/')[-1].split('.')[0]
            if name != '':
                next_url = 'https://www.kylc.com' + a
                response = requests.get(next_url, headers=headers)
                next_html = etree.HTML(response.text)
                parse_data(next_html, name)
                print(name + ' is OK!')
                time.sleep(1)

if __name__ == "__main__":
    main()

结果

爬取世界各国历年的GDP数据_第5张图片
爬取世界各国历年的GDP数据_第6张图片
总共爬到了209个国家的GDP数据,相应国家的数据已经保存到对应的CSV文件中了。

总结

这次爬取的主要难点在于数据的提取和CSV文件的存储上,其他的操作都是一些较为常规的操作。对于数据的可视化以及展示,等我有空后再做吧!
爬取世界各国历年的GDP数据_第7张图片

蒟蒻写博客不易,如果有误还请大佬们提出
如需转载,请署名作者并附上原文链接,蒟蒻非常感激
名称:虐猫人薛定谔i
博客地址:https://blog.csdn.net/Deep___Learning

你可能感兴趣的:(Web,Crawler,大数据,xpath)