python 网络上抓取数据处理并存入到Excel'中
来源:互联网 发布:软件汉化 编辑:程序博客网 时间:2024/06/09 21:16
抓取浏览器的界面是用PhantomJS,
是一个基于Webkit的“无界面”(headless)浏览器,它会把网站加载到内存并执行页面上的 JavaScript,因为不会展示图形界面,所以运行起来比完整的浏览器要高效。
如果我们把 Selenium 和 PhantomJS 结合在一起,就可以运行一个非常强大的网络爬虫了,这个爬虫可以处理 JavaScrip、Cookie、headers,以及任何我们真实用户需要做的事情。
所以说只要是用户能用浏览器登陆的界面或者干的事情,用PhantomJS都能做,因为他就是一个浏览器,但是没有界面而已
想要实现的功能是通过上校园网的教务处查看成绩那,把所需要的成绩和所对应的科目读取出来,如果有挂科的话把记录最高的成绩,计入到对应的excel表中。
难点:因为excel表上的科目和网上读取下来的顺序不一样,而且还得将excel表中科目中的数据加以处理,所以就得将网上爬取下来的数据存入到字典中去,这样通过excel表中的科目的值来进行查找,
from selenium import webdriverfrom lxml import etreeimport xlrdimport reimport xlwtfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support.ui import Selectfrom xlutils.copy import copyclass insert_excel(object): def __init__(self, xuehao, mima, row,url): self.xuehao = xuehao self.mima = mima self.row = row self.chengji = [] self.new_colnames = [] self.num = 0 self.url=url def start(self): self.load_page() def load_page(self): driver = webdriver.PhantomJS() # 获得一个浏览器 driver.get(self.url) # 进行加载页面 driver.find_element_by_name("USERNAME").send_keys(self.xuehao) driver.find_element_by_id("pwd").send_keys(self.mima) # 登陆界面 driver.find_element_by_id("btnSubmit").click() driver.find_element_by_class_name("block10").click() sel = Select(driver.find_element_by_id("xsfs")) sel.select_by_value("max") # 选择最好的成绩 driver.find_element_by_id("btn_query").click() html = driver.page_source # 获得源码 self.handle_data(html) def handle_data(self, html): content = etree.HTML(html) # 将其转为html格式 link_list = content.xpath('//table/tbody/tr/td[6]/a/text()') # xpath解析,解析出所有的成绩 kemu_list = content.xpath('//table/tbody/tr/td[4]/text()') # xpath解析,解析出所有的科目列表 for i in range(0, len(link_list)): # 成绩转换 if link_list[i] == "优": link_list[i] = "90" if link_list[i] == "良": link_list[i] = "80" if link_list[i] == "中": link_list[i] = "70" if link_list[i] == "及格": link_list[i] = "60" if link_list[i] == "不及格": link_list[i] = "59" for i in range(0, len(kemu_list)): # 将科目列表中和excel中不匹配的格式,换为一样的 kemu_list[i] = re.sub('I', 'Ⅰ', kemu_list[i]) # re正则表达式替换 chengji_zidian = dict(zip(kemu_list, link_list)) # 将科目和成绩转成字典类型 self.handle_ecxel(chengji_zidian) def handle_ecxel(self, chengji_zidian): data = xlrd.open_workbook("1.xls") # 打开excel表 table = data.sheets()[0] # 为第一个sheet nrows = table.nrows # 行数 ncols = table.ncols # 列数 colnames = table.row_values(4) # 将第四行的科目取出来装入列表中 liebiao = list(range(0, len(colnames))) # 生成一个列表,因为填入数据是按坐标来填的,有的列数不用填数据,所以将要填写的数据列记录下来 for x in range(0, len(colnames)): # 把一些不需要记录数据的列从colnames中去掉 if colnames[x] == '': liebiao.remove(x) elif colnames[x] == '第一学期': liebiao.remove(x) elif colnames[x] == '第二学期': liebiao.remove(x) else: self.new_colnames.append(colnames[x]) for i in range(0, len(self.new_colnames)): # 将colnames中的数据进行处理,处理成和网页中截取的数据相同 self.new_colnames[i] = re.sub('\n', '', self.new_colnames[i]) self.new_colnames[i] = re.sub('I', 'Ⅰ', self.new_colnames[i]) self.new_colnames[i] = re.sub(' ', '', self.new_colnames[i]) self.data2ecxel(chengji_zidian, data, liebiao) def data2ecxel(self, chengji_zidian, data, liebiao): for i in range(0, len(self.new_colnames)): # 生成成绩列表,如果查询不到即为没选,所以记为0 try: self.chengji.append(chengji_zidian[self.new_colnames[i]]) except: self.chengji.append("0") w_file = copy(data) # 复制一个新的excel表 sheet_write = w_file.get_sheet(0) for i in range(0, len(self.chengji)): # 循环的在新的表中插入数据, sheet_write.write(row, liebiao[i], self.chengji[i]) w_file.save("d:3.xls") # 保存数据 print("插入完成")if __name__ == '__main__': xuehao = input("请输入学号:") row = int(xuehao[8:]) mima = input("请输入密码:") url="http://jwgl.sie.edu.cn/jsxsd/" my_insert = insert_excel(xuehao, mima, row.url) my_insert.start()
阅读全文
1 0
- python 网络上抓取数据处理并存入到Excel'中
- Python抓取数据并存入到mysql
- Python爬取天气预报数据,并存入到本地EXCEL中
- 抓取网络json数据并存入mongodb(1)
- 抓取网络json数据并存入mongodb(2)
- php,使用CodeIgniter框架上传Excel表格,并存入到数据库中
- SpringMVC解析Excel并存入到MySQL数据库
- Python解析excel文件并存入sqlite数据库
- java获取excel中数据并存入数据库表中
- 用nodejs读取文件并存入excel中
- 上传excel并存入数据库
- linux awk数据处理并存入mysql
- 快速分隔一个字符串并存入到List中
- Android 用Retrofit进行网络获取数据,recyclerview进行展示在Fragment里,并存入到GreenDao数据库中
- 抓取华夏安全新闻并存入mysql
- 使用python访问文件,并存入数据库中
- 从Excel读取数据并存入数据库
- MVC4.0 上传Excel并存入数据库
- Codeforces 854A Fraction
- springboot-druid-mybatis多数据源使用
- 使用PullToRefresh实现下拉刷新和上拉加载
- 2017远景能源Java面试
- postman 简单教程-实现简单的接口测试
- python 网络上抓取数据处理并存入到Excel'中
- POJ
- HashMap解决hash冲突的方法
- 关于AssetBundle
- AngularJS开发WebApp的模块
- JavaScript 遍历方法总结 forEach some every filter map includes
- 学习笔记31-C/C++字符串输入
- PHP修改图片大小的实现方法
- 崔雪莉个人介绍