使用爬虫+Flask获取世界国旗数据和孩子一起学习

本文讲述了作者因孩子在幼儿园的社会文化栏目表现不佳,决定通过Python爬虫获取国旗数据,并利用Flask构建一个国旗学习网站,让孩子通过手机学习。文章详细介绍了数据获取、网站分析、图片和数据存储、Flask应用的实现过程,最后展示了手机访问的学习效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作为父亲的失职

现在是凌晨三点半,我完成了今天的文章。之所以熬这么晚,主要是因为我这一对儿不听话的双胞胎。
今天孩子幼儿园发来了一张身心发展评价表,其中有一项社会文化的栏目,他俩都是一颗星(差),其中涉及的内容有:

会朗读和演唱简单的民间歌曲,喜欢听世界著名童话故事,能认识1-2个邻国的国旗。

身心发展表.png

他俩这项都是差让我有些愧疚,自问平时工作太忙,偶尔回家早些也想躺着玩会儿手机,陪孩子的时间不多。所谓子不教父之过,那么针对这个差我能做些什么?大概能认识1-2个邻国的国旗这项比较容易

数据获取

在网上翻了翻,找到一个统计国家、国旗、人口、面积的网站:
http://114.xixik.com/country-flag/
国旗数据.png
国家数据.png
本来想着直接从第二张图的位置去获取,但发现国旗是缩略图,太小看不清。所以只好把这两张图拼接一起。通过国家名字进行关联了…
说干就干…

网站分析

网站总体来说比较简单,统一的样式通过class的lindBox即可获取,下图微网站结构拼接图:
image.png
图片的下载和国家数据分别在第6个和第7个lindBox,对应index的5,6
图片解析img的src一级td的text,将名字对应保存即可
国家数据就更简单了直接for循环所有tr,使用正则格式化下就OK了

批量下载与存储

图片下载使用request.get(url)获取二进制数据,之后写入文件即可,至于目录,我们放在static/images下,至于为什么放这个目录,一会儿说…
国家数据由于不多,所以直接使用SQLite存储即可(其实存文本也行,但不方便后面使用)…
梳理OK,上代码:

# -*- coding: utf-8 -*-
# @Author   : 王翔
# @JianShu  : 清风Python
# @Date     : 2019/6/11 2:19
# @Software : PyCharm
# @version  :Python 3.6.8
# @File     : CountryFlagCrawler.py.py

import requests
from bs4 import BeautifulSoup
import re
import os
from db_maker import DB_Maker as DB


class CountryFlagCrawler:
    def __init__(self):
        self.url = "http://114.xixik.com/country-flag/"
        self.headers = {
   
            'Host': "114.xixik.com",
            'Connection': 'keep-alive',
            'user-agent': ('Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 '
                           '(KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36')
        }
        self.db = DB()
        self.save_path = 'static/images'

    def check_dir(self):
        if not os.path.exists(self.save_path):
            os.mkdir(self.save_path)

    def get_response(self, url, params=None):
        r = requests.get(url, headers=self.headers, params=params)
        r.encoding = 'gb2312'
        soup = BeautifulSoup(r.text, "lxml")
        return soup

    def down_load_flag(self):
        soup = self.get_response(self.url)
        tds = soup.findAll("div", {
   "class": "lindBox"})[5].findAll("td")
        for td in tds:
            try:
                picture_url = td.find('img')['src']
                country_name = '%s.gif' % re.sub('\s', '', td.text)
                print("Download %s" % country_name)
                r = requests.get(picture_url)
                with open(os.path.join(self.save_path, country_name), 'wb') as f:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值