“智能问诊”项目——数据获取(2)
来源:互联网 发布:linux vnc 编辑:程序博客网 时间:2024/05/01 09:26
在之前已经实现了将爬取到的信息直接打印出来,但这样是远远不够的,要对数据进行进一步的处理,就要将其存放在数据库中,我的方法是先将数据调整格式后储存在本地的Excel中,然后再由Excel导入数据库。
对Excel进行操作主要用到了xlwt模块,官网下载(http://pypi.python.org/pypi/xlwt)。大致使用流程如下:
1、导入模块
import xlwt
2、创建workbook(其实就是excel,后来保存一下就行)
workbook = xlwt.Workbook(encoding = 'utf-8')
3、创建表
worksheet = workbook.add_sheet('My Worksheet')
4、往单元格内写入内容
worksheet.write(0, 0, x)
该函数的前两个变量分别表示单元格的横纵坐标,与数组类似,第三个变量为写入单元格的内容
5、保存
workbook.save('Excel_Workbook.xls')
附源码:
__author__='XJX'__date__='2017.07.19'import reimport urllib.requestimport urllibimport xlwt #网址url1 = "http://drugs.medlive.cn/drugref/html/"url2 = ".shtml"i = 1book=xlwt.Workbook(encoding='utf-8')sheet1=book.add_sheet('sheet1',cell_overwrite_ok=True)heads=[u'药品名称',u'所属类别',u'性状',u'适应症',u'用法用量',u'不良反应',u'注意事项',u'url']ii=0for head in heads: sheet1.write(0,ii,head) ii+=1for n in range(2,14579): url = url1 + str(n) + url2 try: #抓取页面 urlop = urllib.request.urlopen(url,timeout=100) except Exception: print("超时") continue #判断是否为html页面 if 'html' not in urlop.getheader('Content-Type'): continue #避免程序异常中止, 用try..catch处理异常 try: #转换为utf-8码 data = urlop.read().decode('utf-8') #print(data) except: continue #正则表达式提取页面中所有队列, 并判断是否已经访问过, 然后加入待爬队列 linkre1 = re.compile("<label class=\"w110\">【通用名称】</label>\\s*\\s*(.*?)\\s*\\s*<") for x in linkre1.findall(data):##返回所有有匹配的列表 sheet1.write(i,0,x) print(x) linkre2 = re.compile("class=\"have-h\">\\s*(.*?)\\s*</a>\\s*</p>\\s*</div>") for x in linkre2.findall(data):##返回所有有匹配的列表 sheet1.write(i,1,x) #print(x) linkre3 = re.compile("性状:</a>\\s*</div>\\s*<div class=\"more-infomation\">\\s*<p>(.*?)</p>\\s*</div>") for x in linkre3.findall(data):##返回所有有匹配的列表 sheet1.write(i,2,x) #print(x) linkre4 = re.compile("适应症:</a>\\s*</div>\\s*<div class=\"more-infomation\">\\s*<p>(.*?)</p>\\s*</div>") for x in linkre4.findall(data):##返回所有有匹配的列表 sheet1.write(i,3,x) #print(x) linkre5 = re.compile("用法用量:\\s*</a>\\s*</div>\\s*<div class=\"more-infomation\">\\s*<p>(.*?)</p>\\s*</div>") for x in linkre5.findall(data):##返回所有有匹配的列表 sheet1.write(i,4,x) #print(x) linkre6 = re.compile("不良反应:</a>\\s*</div>\\s*<div class=\"more-infomation\">\\s*<p>(.*?)</p>\\s*</div>") for x in linkre6.findall(data):##返回所有有匹配的列表 sheet1.write(i,5,x) #print(x) linkre7 = re.compile("注意事项:</a>\\s*</div>\\s*<div class=\"more-infomation\">\\s*<p>(.*?)</p>\\s*</div>") for x in linkre7.findall(data):##返回所有有匹配的列表 sheet1.write(i,6,x) #print(x) sheet1.write(i,7,x) print(url) i += 1 book.save("/Users/xujiaxing/Desktop/data.xls")
完成了将爬取信息导入表格后就可以将表格信息导入数据库了
在这里我用的是Navicat for SQL Server
导入方法参考http://www.cnblogs.com/wanggd/archive/2012/11/09/2762761.html即可
需要注意的是,导入指定类型数据时栏位对应数据的长度应根据数据的最大长度确定,否则将无法成功导入
为了防止这种情况的出现,我将中文文本的类型都设置为了nvarchar(max),可以理解为是汉字的最大长度,将英文文本的类型都设置为了varchar(max),可以理解为是非汉字字符的最大长度,既然都已经设置成了最大,后面的size就不用管直接默认是0就可以了
这样我们就成功将爬取到的数据导入了数据库
阅读全文
0 0
- “智能问诊”项目——数据获取(2)
- “智能问诊”项目——数据获取(1)
- “智能问诊”项目——数据获取(3)
- “智能问诊”项目——数据匹配(1)
- “智能问诊”项目——数据处理(2)
- “智能问诊”项目——数据处理(1)
- “智能问诊”项目——机器学习(1)
- 江苏省职业健康监护平台数据交换方案 UploadEntity06问诊
- Android开发智能机器人聊天项目(2)- Json数据解析
- 实验室智能管理系统(1)——项目介绍
- STM32项目(五)——智能回收箱
- STM32项目(七) —— 智能仓库管理系统
- 《科技之巅2》序——机器智能数据智能:工具之王
- 安卓小项目之Everyday(2)---从网络获取数据之获取笑话数据
- 项目 - 智能交通(2)
- 《商务智能 管理视角》——(五)数据挖掘(2)
- 【ML项目】基于网络爬虫和数据挖掘算法的web招聘数据分析(一)——数据获取与处理
- 医疗项目:电话问诊,需要为电话按钮添加波纹扩散效果
- 正则表达式知识点总结
- Shell脚本中并发线程以及并发数的控制
- 汉字混淆,取代原先默认的字母混淆。
- HDU2551 竹青遍野【数学计算+水题】
- storm基本概念
- “智能问诊”项目——数据获取(2)
- HashMap工作原理
- Server Tomcat v7.0 Server at localhost is not responding. Do you want to terminate this server?. Cli
- STM32 GPIO使用超强总结
- android的各种文件目录
- Python 函数
- 计算机程序的思维逻辑 (12)
- 9个常用iptables配置实例
- 基于tensorflow的增强学习