Python爬取好大学排名

import requests
import bs4
from bs4 import BeautifulSoup

def getHTMLText(url):
    try:
        r = requests.get(url, timeout = 30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ""

def fillUnivList(ulist, html):
    soup = BeautifulSoup(html, "html.parser")
    for tr in soup.find("tbody").children:
        if isinstance(tr, bs4.element.Tag):
            tds = tr("td")
            ulist.append([tds[0].string, tds[1].string, tds[2].string])

def printUnivList(ulist, num):
    tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
    print(tplt.format("排名", "学校名称", "总分", chr(12288)))
    for i in range(num):
        u = ulist[i]
        print(tplt.format(u[0], u[1], u[2],chr(12288)))


def main():
    unifo = []
    url = "http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html"
    html = getHTMLText(url)
    fillUnivList(unifo, html)
    printUnivList(unifo, 20)
main()

打印效果
D:\python\Spider\venv\Scripts\python.exe D:/python/Spider/Spider_CNPM.py
排名    学校名称    总分
1    清华大学    北京
2    北京大学    北京
3    浙江大学    浙江
4   上海交通大学   上海
5    复旦大学    上海
6  中国科学技术大学  安徽
7   华中科技大学   湖北
7    南京大学    江苏
9    中山大学    广东
10  哈尔滨工业大学   黑龙江
11  北京航空航天大学  北京
12    武汉大学    湖北
13    同济大学    上海
14   西安交通大学   陕西
15    四川大学    四川
16   北京理工大学   北京
17    东南大学    江苏
18    南开大学    天津
19    天津大学    天津
20   华南理工大学   广东

Process finished with exit code 0

要在Python中实现从网络上爬取全国大学排名并将其数据导入到MySQL数据库,你需要经过几个步骤: ### 步骤一:准备工作 首先需要准备好所需的工具库。如果你还没有安装 `requests`、`BeautifulSoup4` 和 `pymysql` 这三个常用的Python包,可以使用pip命令来安装它们。 ```bash pip install requests beautifulsoup4 pymysql ``` ### 步骤二:获取网页内容 接下来利用`requests.get()`函数请求目标网站的数据页面,并检查响应的状态码是否正常(即200)以确认请求成功。如果一切顺利,则将HTML文本传递给 BeautifulSoup 对象以便解析;否则抛出异常提示错误信息。 ### 示例代码 - 获取网页内容: ```python import requests from bs4 import BeautifulSoup def get_page_content(url): try: resp = requests.get(url) if resp.status_code == 200: return resp.text else: print(f"Failed to fetch page with status code {resp.status_code}") except Exception as e: print(e) url = 'http://example.com/university-rankings' # 替换为目标网址 html_doc = get_page_content(url) if html_doc is not None: soup = BeautifulSoup(html_doc, "lxml") else: exit(-1) ``` 注意这里的URL应该替换为你实际想要抓取的包含学校排名的具体链接地址。 ### 步骤三:提取所需的信息 接着就可以开始编写正则表达式或选择CSS路径等规则,在 Soup 文档里查找我们关心的内容项了。例如可以根据表格结构找到所有行(`<tr>`标签),然后逐个读取每列中的值作为一条记录的一部分。 假设你已经找到了相应的 HTML 标签,下面是如何从中抽取数据的一个例子: ### 示例代码 - 提取信息: ```python data = [] table_body = soup.find('tbody') # 假设数据在一个 <tbody> 中 rows = table_body.find_all('tr') for row in rows[1:]: # 跳过表头第一行 cols = [ele.text.strip() for ele in row.select("td")] data.append(cols[:]) # 只保留前几列表示排名、名称之类的基本字段 # 打印样本数据查看结果 print(data[:5]) ``` 这里只是给出了一种简单的做法,实际情况可能会更复杂些,特别是当遇到JavaScript动态加载的部分时还需要额外处理。 ### 步骤四:建立 MySQL 数据库连接 现在让我们转而关注如何把得到的结果保存至本地的关系型数据库管理系统 (RDBMS)-MySQL里面去吧! 创建一个新的 Python 文件用于管理数据库交互部分,先引入必要的模块并且设置好服务器端的相关配置参数如主机名(host), 用户名(user),密码(password)以及要操作的目标数据库(dbname): ### 示例代码 - 创建MySQL数据库连接: ```python import pymysql.cursors connection_config = { 'host': 'localhost', 'port': 3306, 'user': '<your_username>', 'password': '<your_password>', 'database': '<dbname>' } connnection = pymysql.connect(**connection_config) cursor = connection.cursor() ``` 别忘了用自己的真实凭据替代上面占位符内的字符串哦~比如换成 root 或者其他有足够权限访问特定 schema 的账户。 ### 步骤五:插入数据到 MySQL 表格中 最后一步就是构建合适的 SQL 插入语句并将之前准备好的每一组属性对应地填进去啦!为了防止SQL注入攻击的风险建议尽量采用预编译的方式执行查询。 同时考虑到效率问题最好是一次提交多条而不是频繁开启关闭事务,因此我们可以批量处理整个 list 形式的 records 集合后再统一 commit 操作即可。 ### 示例代码 - 向数据库添加新纪录 : ```python try: sql = """ INSERT INTO university_ranking ( rank_position ,school_name,score,...other_columns... ) VALUES (%s,%s,%s,...%n...) """ cursor.executemany(sql, data) # 使用 executemany 方法提高性能 connnection.commit() except Exception as err : print(f"MySQL Error Occured : {err}") finally: cursor.close() connection.close() ``` 以上便是大致的工作流程概述,当然这中间还有很多细节需要注意调整优化,希望这个指南对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值