Python爬虫——爬取中国高校排名前100名并写入MySQL

简介:   本篇分享讲爬取中国高校排名前100名并将其写入MySQL,这样做的好处是:1.将数据存入数据库,能永久利用;2.能利用数据库技术做一些其他操作。

  本篇分享讲爬取中国高校排名前100名并将其写入MySQL,这样做的好处是:1.将数据存入数据库,能永久利用;2.能利用数据库技术做一些其他操作。爬取的网页是:http://gaokao.xdf.cn/201702/10612921.html, 截图如下(部分):
  中国高校排名前100名
  我们的程序在Linux平台上运行,需要用到MySQL和Python中的MySQLdb模块,其中MySQLdb 是封装MySQL访问和操作的模块。我们的思路是:先利用urllib和BeautifulSoup爬取前100名的表格,返回list形式,再利用MySQLdb将list写入数据中。
  

def get_html(url):
        html = urllib.request.urlopen(url)  
        content = html.read()  
        html.close()
        soup = BeautifulSoup(content, "lxml")      
        table = soup.find('tbody')
        count = 0 
        lst = []
        for tr in table.children:
            if isinstance(tr, bs4.element.Tag):
                td = tr('td')
                if count >= 2:
                    lst.append([td[i]('p')[0].string.replace('\n','').replace('\t','') for i in range(8) if i != 3])
                count += 1

        return lst

  该段代码实现了爬取中国高校前100名的表格,并保留了名次、学校名称、地区、总分、办学类型、星级排名、办学层次这7个字段。其中的url即为开始提到的网站网址。

    url = 'http://gaokao.xdf.cn/201702/10612921.html'
    universities_lst = get_html(url)
    # 打开数据库连接
    db = MySQLdb.connect("localhost","root","147369","test",charset='utf8')
    # 使用cursor()方法获取操作游标 
    cursor = db.cursor()
    # 使用execute方法执行SQL语句
    cursor.execute("SET NAMES utf8");
    cursor.execute("""create table university_rank(排名 int(3),高校 varchar(20),地区 varchar(10),总分 decimal(9,2),办学类型 varchar(10),
                                        星级排名 varchar(8),办学层次 varchar(40)) default charset = utf8""")
    for x in universities_lst:
        sql = "insert into university_rank values('%s','%s','%s','%s','%s','%s','%s')"%(x[0],x[1],x[2],x[3],x[4],x[5],x[6])
        cursor.execute(sql)
    db.commit()

    # 关闭数据库连接
    db.close()  
    print("Create table already! Please check Mysql!")

  该段代码将上述爬取的表格写入MySQL数据库中,先新建一张university_rank表格,再讲值插入。我们可以去MySQL中查看。
  大学排名MySQL
  这说明我们确实将爬取的高校排名写入了MySQL,接下来我们就只需要对数据库进行操作了,比如说我想知道在这前100中,每个省份的学校数量,可以通过以下命令实现:
  count group
  从中我们可以,前100名中的高校中,北京最多,有19所,江苏其次,11所,上海第三,有9所。当然,我们还可以用该数据库做一些其他有趣的事情~~
  



  本次分享到此结束,如有不足之处,还往批评指正。
  P.S.附上本篇分享的整个程序:
  

'''
Created on Aug 16, 2017

@author: vagrant
'''
# -*- coding: UTF-8 -*-
import bs4
import MySQLdb
import urllib.request  
from bs4 import BeautifulSoup 

def get_html(url):
        html = urllib.request.urlopen(url)  
        content = html.read()  
        html.close()
        soup = BeautifulSoup(content, "lxml")      
        table = soup.find('tbody')
        count = 0 
        lst = []
        for tr in table.children:
            if isinstance(tr, bs4.element.Tag):
                td = tr('td')
                if count >= 2:
                    lst.append([td[i]('p')[0].string.replace('\n','').replace('\t','') for i in range(8) if i != 3])
                count += 1

        return lst

if __name__ == '__main__':
    url = 'http://gaokao.xdf.cn/201702/10612921.html'
    universities_lst = get_html(url)
    # 打开数据库连接
    db = MySQLdb.connect("localhost","root","147369","test",charset='utf8')
    # 使用cursor()方法获取操作游标 
    cursor = db.cursor()
    # 使用execute方法执行SQL语句
    cursor.execute("SET NAMES utf8");
    cursor.execute("""create table university_rank(排名 int(3),高校 varchar(20),地区 varchar(10),总分 decimal(9,2),办学类型 varchar(10),
                                        星级排名 varchar(8),办学层次 varchar(40)) default charset = utf8""")
    for x in universities_lst:
        sql = "insert into university_rank values('%s','%s','%s','%s','%s','%s','%s')"%(x[0],x[1],x[2],x[3],x[4],x[5],x[6])
        cursor.execute(sql)
    db.commit()

    # 关闭数据库连接
    db.close()  
    print("Create table already! Please check Mysql!")
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
8月前
|
数据采集 测试技术 C++
无headers爬虫 vs 带headers爬虫:Python性能对比
无headers爬虫 vs 带headers爬虫:Python性能对比
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
552 6
|
8月前
|
数据采集 存储 监控
Python 原生爬虫教程:网络爬虫的基本概念和认知
网络爬虫是一种自动抓取互联网信息的程序,广泛应用于搜索引擎、数据采集、新闻聚合和价格监控等领域。其工作流程包括 URL 调度、HTTP 请求、页面下载、解析、数据存储及新 URL 发现。Python 因其丰富的库(如 requests、BeautifulSoup、Scrapy)和简洁语法成为爬虫开发的首选语言。然而,在使用爬虫时需注意法律与道德问题,例如遵守 robots.txt 规则、控制请求频率以及合法使用数据,以确保爬虫技术健康有序发展。
1157 31
|
7月前
|
数据采集 存储 NoSQL
分布式爬虫去重:Python + Redis实现高效URL去重
分布式爬虫去重:Python + Redis实现高效URL去重
|
8月前
|
数据采集 XML 存储
Headers池技术在Python爬虫反反爬中的应用
Headers池技术在Python爬虫反反爬中的应用
|
数据采集 存储 搜索推荐
打造个性化网页爬虫:从零开始的Python教程
【8月更文挑战第31天】在数字信息的海洋中,网页爬虫是一艘能够自动搜集网络数据的神奇船只。本文将引导你启航,用Python语言建造属于你自己的网页爬虫。我们将一起探索如何从无到有,一步步构建一个能够抓取、解析并存储网页数据的基础爬虫。文章不仅分享代码,更带你理解背后的逻辑,让你能在遇到问题时自行找到解决方案。无论你是编程新手还是有一定基础的开发者,这篇文章都会为你打开一扇通往数据世界的新窗。
|
数据采集 存储 数据挖掘
深入探索 Python 爬虫:高级技术与实战应用
本文介绍了Python爬虫的高级技术,涵盖并发处理、反爬虫策略(如验证码识别与模拟登录)及数据存储与处理方法。通过asyncio库实现异步爬虫,提升效率;利用tesseract和requests库应对反爬措施;借助SQLAlchemy和pandas进行数据存储与分析。实战部分展示了如何爬取电商网站的商品信息及新闻网站的文章内容。提醒读者在实际应用中需遵守法律法规。
472 66
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
554 4
|
数据采集 Web App开发 JavaScript
爬虫策略规避:Python爬虫的浏览器自动化
爬虫策略规避:Python爬虫的浏览器自动化
|
数据采集 JavaScript 前端开发
JavaScript逆向爬虫——使用Python模拟执行JavaScript
JavaScript逆向爬虫——使用Python模拟执行JavaScript
491 2

推荐镜像

更多