python解析html提取数据,并生成word文档实例解析


Posted in Python onJanuary 22, 2018

简介

今天试着用ptyhon做了一个抓取网页内容,并生成word文档的功能,功能很简单,做一下记录以备以后用到。

生成word用到了第三方组件python-docx,所以先进行第三方组件的安装。由于windows下安装的python默认不带setuptools这个模块,所以要先安装setuptools这个模块。

安装

1、在python官网上找到 https://bootstrap.pypa.io/ez_setup.py

,把代码保存到本地并执行:  python ez_setup.py

2、下载python-docx  (https://pypi.python.org/pypi/python-docx/0.7.4),下载完成后解压并进入到

XXX\python-docx-0.7.4 安装python-docx : python setup.py install

这样python-docx就安装成功了,可以用它来操作word文档了,word文档的生成参考的这里https://python-docx.readthedocs.org/en/latest/index.html

html解析用到的是sgmllib里的SGMLParser

url内容的获取用到的是urllib、urllib2

实现代码

# -*- coding: cp936 -*- 
from sgmllib import SGMLParser 
import os 
import sys 
import urllib 
import urllib2 
from docx import Document 
from docx.shared import Inches 
import time 
 
##获取要解析的url 
class GetUrl(SGMLParser): 
  def __init__(self): 
    SGMLParser.__init__(self) 
    self.start=False 
    self.urlArr=[] 
 
 
  def start_div(self,attr): 
    for name,value in attr: 
      if value=="ChairmanCont Bureau":#页面js中的固定值 
        self.start=True 
 
 
  def end_div(self): 
    self.start=False 
 
 
  def start_a(self,attr): 
    if self.start: 
      for name,value in attr: 
        self.urlArr.append(value) 
       
 
 
  def getUrlArr(self): 
    return self.urlArr 
   
##解析上面获取的url,获取有用数据 
class getManInfo(SGMLParser): 
  def __init__(self): 
    SGMLParser.__init__(self) 
    self.start=False 
    self.p=False 
    self.dl=False 
    self.manInfo=[] 
    self.subInfo=[] 
 
  def start_div(self,attr): 
    for name,value in attr: 
      if value=="SpeakerInfo":#页面js中的固定值 
        self.start=True 
 
  def end_div(self): 
    self.start=False 
 
  def start_p(self,attr): 
    if self.dl: 
      self.p=True 
 
  def end_p(self): 
    self.p=False 
 
  def start_img(self,attr): 
    if self.dl: 
      for name,value in attr: 
        self.subInfo.append(value) 
     
 
 
  def handle_data(self,data): 
    if self.p: 
      self.subInfo.append(data.decode('utf-8')) 
 
 
  def start_dl(self,attr): 
    if self.start: 
      self.dl=True 
 
  def end_dl(self): 
    self.manInfo.append(self.subInfo) 
    self.subInfo=[] 
    self.dl=False 
 
  def getManInfo(self): 
    return self.manInfo 
 
 
 
         
 
urlSource="http://www.XXX" 
sourceData=urllib2.urlopen(urlSource).read() 
 
startTime=time.clock() 
##get urls 
getUrl=GetUrl() 
getUrl.feed(sourceData) 
urlArr=getUrl.getUrlArr() 
getUrl.close() 
print "get url use:" + str((time.clock() - startTime)) 
startTime=time.clock() 
 
 
##get maninfos 
manInfos=getManInfo() 
for url in urlArr:#one url one person 
  data=urllib2.urlopen(url).read() 
  manInfos.feed(data) 
infos=manInfos.getManInfo() 
manInfos.close() 
print "get maninfos use:" + str((time.clock() - startTime)) 
startTime=time.clock() 
 
#word 
saveFile=os.getcwd()+"\\xxx.docx" 
doc=Document() 
##word title 
doc.add_heading("HEAD".decode('gbk'),0) 
p=doc.add_paragraph("HEADCONTENT:".decode('gbk')) 
 
 
##write info 
for infoArr in infos: 
  i=0 
  for info in infoArr: 
    if i==0:##img url 
      arr1=info.split('.') 
      suffix=arr1[len(arr1)-1] 
      arr2=info.split('/') 
      preffix=arr2[len(arr2)-2] 
      imgFile=os.getcwd()+"\\imgs\\"+preffix+"."+suffix 
      if not os.path.exists(os.getcwd()+"\\imgs"): 
        os.mkdir(os.getcwd()+"\\imgs") 
      imgData=urllib2.urlopen(info).read() 
 
      try: 
        f=open(imgFile,'wb') 
        f.write(imgData) 
        f.close() 
        doc.add_picture(imgFile,width=Inches(1.25)) 
        os.remove(imgFile) 
      except Exception as err: 
        print (err) 
  
       
    elif i==1: 
      doc.add_heading(info+":",level=1) 
    else: 
      doc.add_paragraph(info,style='ListBullet') 
    i=i+1 
 
   
doc.save(saveFile) 
print "word use:" + str((time.clock() - startTime))

总结

以上就是本文关于python解析html提取数据,并生成word文档实例解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
Python的设计模式编程入门指南
Apr 02 Python
在Python程序中操作文件之flush()方法的使用教程
May 24 Python
通过Python爬虫代理IP快速增加博客阅读量
Dec 14 Python
Python编程之黑板上排列组合,你舍得解开吗
Oct 30 Python
可能是最全面的 Python 字符串拼接总结【收藏】
Jul 09 Python
Python实现监控键盘鼠标操作示例【基于pyHook与pythoncom模块】
Sep 04 Python
python getpass实现密文实例详解
Sep 24 Python
pandas中的数据去重处理的实现方法
Feb 10 Python
Python中的sys.stdout.write实现打印刷新功能
Feb 21 Python
Python自动采集微信联系人的实现示例
Feb 28 Python
pycharm中使用request和Pytest进行接口测试的方法
Jul 31 Python
opencv实现图像平移效果
Mar 24 Python
Python复制Word内容并使用格式设字体与大小实例代码
Jan 22 #Python
Python读取word文本操作详解
Jan 22 #Python
python导出hive数据表的schema实例代码
Jan 22 #Python
Python的SimpleHTTPServer模块用处及使用方法简介
Jan 22 #Python
一道python走迷宫算法题
Jan 22 #Python
浅谈使用Python内置函数getattr实现分发模式
Jan 22 #Python
python正则表达式及使用正则表达式的例子
Jan 22 #Python
You might like
PHP脚本的10个技巧(2)
2006/10/09 PHP
php实现将wav文件转换成图像文件并在页面中显示的方法
2015/04/21 PHP
php实现的一段简单概率相关代码
2016/05/30 PHP
php判断手机浏览还是web浏览,并执行相应的动作简单实例
2016/07/28 PHP
TFDN图片播放器 不错自动播放
2006/10/03 Javascript
jQuery.fn和jQuery.prototype区别介绍
2013/10/05 Javascript
javascript记录文本框内文字个数检测文字个数变化
2014/10/14 Javascript
Jquery中的$.each获取各种返回类型数据的使用方法
2015/05/03 Javascript
js实现遍历含有input的table实例
2015/12/07 Javascript
JavaScript事件类型中焦点、鼠标和滚轮事件详解
2016/01/25 Javascript
js+canvas绘制矩形的方法
2016/01/28 Javascript
Java框架SSH结合Easyui控件实现省市县三级联动示例解析
2016/06/12 Javascript
微信小程序 switch组件详解及简单实例
2017/01/10 Javascript
详解angularJs模块ui-router之状态嵌套和视图嵌套
2017/04/28 Javascript
jquery.masonry瀑布流效果
2017/05/25 jQuery
vue.js,ajax渲染页面的实例
2018/02/11 Javascript
express + jwt + postMan验证实现持久化登录
2019/06/05 Javascript
详解在Angular4中使用ng2-baidu-map的方法
2019/06/19 Javascript
vue 解决文本框被键盘遮住的问题
2019/11/06 Javascript
js实现适配移动端的拖动效果
2020/01/13 Javascript
javascript实现简易的计算器
2020/01/17 Javascript
基于ajax及jQuery实现局部刷新过程解析
2020/09/12 jQuery
Javascript类型判断相关例题及解析
2020/08/26 Javascript
详解Python编程中基本的数学计算使用
2016/02/04 Python
详解python3实现的web端json通信协议
2016/12/29 Python
python多线程并发实例及其优化
2019/06/27 Python
Python析构函数__del__定义原理解析
2020/11/20 Python
详解canvas绘制网络字体几种方法
2019/08/27 HTML / CSS
迪士尼法国在线商店:shopDisney FR
2020/12/03 全球购物
护理专业个人求职简历的自我评价
2013/10/13 职场文书
门卫人员岗位职责
2013/12/24 职场文书
中队活动总结
2014/08/27 职场文书
房产公证委托书范本
2014/09/20 职场文书
安全教育培训心得体会
2016/01/15 职场文书
优秀家长事迹材料(2016推荐版)
2016/02/29 职场文书
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
2021/06/21 Java/Android