python爬虫——图书馆html文件解析并存入excel
时间:2019-01-18
本文章向大家介绍python爬虫——图书馆html文件解析并存入excel,主要包括python爬虫——图书馆html文件解析并存入excel使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
环境
- beautifulsoup4
- xlsxwriter
补上次爬取网页的分析代码:
from bs4 import BeautifulSoup
import os
import copy
from xlsxwriter.workbook import Workbook
def save_into_excel(persons_list,save_name):
headings = ['学号', '姓名', '专业班级', '书名', '作者', '索引号', '借阅时间']
data = []
for person in persons_list:
for book_info in person['books_list']:
data.append([person['no'], person['name'], save_name, book_info['title'], book_info['author'], book_info['index'], book_info['time']])
workbook = Workbook(save_name + '.xlsx')
worksheet = workbook.add_worksheet()
worksheet.write_row('A1', headings)
for row_num, row_data in enumerate(data):
worksheet.write_row(row_num + 1, 0, row_data)
workbook.close()
def getInfo(major):
persons_list = []
person = {
'no': 0,
'major': major,
'name' : '',
'books_list' : []
}
book_info = {
'title':'',
'author':'',
'index' :'',
'time' : ''
}
path = 'E:\\craw_lib'
for file_name in os.listdir(path):
file_path = os.path.join(path,file_name)
sep_pos = file_name.index('_')
no = file_name[2:sep_pos]
no = int(no)
if no != person['no']:
# 获取到新用户
if person['no'] != 0:
person_copy = copy.deepcopy(person)
persons_list.append(person_copy)
person['no'] = no
person['books_list'].clear()
# print("no : %s" % no)
filehander = open(file_path, "r", encoding='utf-8')
soup = BeautifulSoup(filehander, 'lxml')
#获取姓名
name_div = soup.find('div', 'navbar_info_zh')
strings = name_div.stripped_strings
list = []
for s in strings:
list.append(str(s))
name = list[2]
name = name[4:]
person['name'] = name
print(name)
table = soup.find('table', id = 'contentTable')
all_tr = table.find_all('tr')
for tr in all_tr:
#创建书单
tds = tr.find_all('td')
if len(tds) != 0:
borrow_flag = True
state_tag = tds[0]
for ss in state_tag.stripped_strings:
state = str(ss)
if state == '借书':
title_tag = tds[2]
author_tag = tds[3]
index_tag = tds[4]
time_tag = tds[7]
book_info['title'] = str(title_tag.string) #直接赋值时,深拷贝递归超限
book_info['author'] = str(author_tag.string)
book_info['index'] = str(index_tag.string)
book_info['time'] = str(time_tag.string)
else:
borrow_flag = False
if borrow_flag == True:
book_info_copy = copy.deepcopy(book_info)
person['books_list'].append(book_info_copy)
person_copy = copy.deepcopy(person)
persons_list.append(person_copy)
save_into_excel(persons_list,major)
if __name__ == '__main__':
major = input('please input a major:\n')
getInfo(major)
有关保存数据到xlsx,参考:
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android recyclerView横条指示器实现淘宝菜单模块
- Android studio kotlin代码格式化操作
- Android Studio升级3.6 Build窗口出现中文乱码问题解决方法
- Android中AndroidStudio&Kotlin安装到运行过程及常见问题汇总
- AndroidStudio3.6的卸载安装,Gradle持续下载/Gradle Build失败等问题
- 搭建DNSmasq简单教程带WEB管理面板
- Android Studio报错unable to access android sdk add-on list解决方案
- 自建的纯净dns服务拦截部分广告,南方推荐
- Nginx安装lua-nginx-module模块
- IPinfo 多接口IP查询工具源码
- 教你CentOS7下如何更换内核安装BBR加速
- we-extract解析和采集微信公众号文章的账号及内容必备工具
- android九宫格可分页加载控件使用详解
- WordPress用插件实现MarkDown语法支持
- Android中实现长按照片弹出右键菜单功能的实例代码