参考链接:https://www.makcyun.top/web_scraping_withpython2.html

#!/usr/bin/env python
# -*- coding: utf-8 -*- from multiprocessing.pool import Pool import pandas as pd
import requests
from sqlalchemy import create_engine # 数据库相关信息
HOSTNAME = '127.0.0.1'
PORT = ''
DATABASE = 'top500'
USERNAME = 'root'
PASSWORD = 'root' SQLALCHEMY_DATABASE_URI = "mysql+mysqlconnector://{username}:{password}@{host}:{port}/{db}?charset=utf8mb4".format(
username=USERNAME,
password=PASSWORD,
host=HOSTNAME,
port=PORT,
db=DATABASE) SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMT_ENCODING = 'utf8mb4' engine = create_engine(SQLALCHEMY_DATABASE_URI, echo=True) # 获取网页收据
def get_one_page(url):
response = requests.get(url)
if response.status_code == 200:
return response.text
else:
return None # 保存到csv文件
def save_csv(html):
dataframe = pd.read_html(html)
tb = dataframe[0].drop([0]) # 获取网页数据中的第一个表格数据,然后再去掉第一个表格数据中的的第一行(去掉的话csv文件中没有列名,不去掉的话多次写入列名)
# tb.columns = ['rank', 'site', 'system', 'cores', 'rmax', 'rpeak', 'power'] # 重命名列名
tb.to_csv(r'top500.csv', mode='a', encoding='utf_8_sig', index=True, header=False) # def save_mysql(html):
dataframe = pd.read_html(html)
tb = dataframe[0].drop([0])
tb.columns = ['rank', 'site', 'system', 'cores', 'rmax', 'rpeak', 'power']
try:
tb.to_sql('top500', con=engine, if_exists='append', index=False) # 需要事先建好top500数据表,并注意字段名称跟数据列名一一对应,字段值的长度要足够
print('success')
except:
print('fail') def main(offset):
url = 'https://www.top500.org/list/2018/11/?page=' + str(offset)
html = get_one_page(url)
# save_csv(html)
save_mysql(html) if __name__ == '__main__':
pool = Pool()
pool.map(main, [i for i in range(1, 6)])

csv文件效果:

csv文件待优化的地方:加上列名

mysql效果:

问题:

1.不论是csv文件还是mysql表格数据,根据rank字段进行排序,竟然排序的不怎么准确

2.site字段的最后部分数据是国家,这个需要想办法给剥离出来,再弄一列数据展示

最新文章

  1. 关于android的日志输出&LogCat
  2. C# 利用占位符替换word中的字符串和添加图片
  3. 关于GC的几篇文章
  4. JS的预编译和执行顺序 详析(及全局与局部变量)
  5. Ida动态修改android程序的内存数据和寄存器数值,绕过so文件的判断语句
  6. centos 20T硬盘(超过16T)分区
  7. AX 2012 EP服务器配置多个环境
  8. HDU 1721
  9. 多用pip,少用easy_install。
  10. SD卡中FAT32文件格式高速入门(图文具体介绍)
  11. Educational Codeforces Round 15_D. Road to Post Office
  12. 也许是目前实现最好的js模拟滚动插件
  13. 【机器学习实战】第7章 集成方法 ensemble method
  14. 学习web前端技术的笔记,仅供自己查阅备忘,图片上传预览
  15. 认识 SurfaceView
  16. MongoDB 基本操作和聚合操作
  17. http options 请求
  18. php get接口,并在浏览器中以json格式返回查找到的数据
  19. linux 精简开机自启动
  20. /etc/shadow中密码段的生成方式

热门文章

  1. JavaScript的代码库
  2. 游戏人生(一),我的lua之旅:那些坑爹的CCBReaderLoad
  3. java电影站点开发经验3
  4. Golang Template source code analysis(Parse)
  5. Bean Query 改动Bug的版本号(1.0.1)已公布
  6. 转:Java 计算2个时间相差多少年,多少个月,多少天的几种方式
  7. Framebuffer 机制【转】
  8. B1607 [Usaco2008 Dec]Patting Heads 轻拍牛头 数学
  9. JFreeChart之堆叠柱形图(StackedBar)
  10. spring整合redis客户端及缓存接口设计