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标准库中的wave模块绘制乐谱的简单教程
Mar 30 Python
python 函数内部修改外部变量的方法
Dec 18 Python
Python字符串逆序输出的实例讲解
Feb 16 Python
关于PyTorch源码解读之torchvision.models
Aug 17 Python
Python实现朴素贝叶斯的学习与分类过程解析
Aug 24 Python
python实现广度优先搜索过程解析
Oct 19 Python
让Django的BooleanField支持字符串形式的输入方式
May 20 Python
Python3开发环境搭建详细教程
Jun 18 Python
Python错误的处理方法
Jun 23 Python
浅谈如何使用python抓取网页中的动态数据实现
Aug 17 Python
pymongo insert_many 批量插入的实例
Dec 05 Python
opencv-python图像配准(匹配和叠加)的实现
Jun 23 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用header函数实现301跳转代码实例
2013/11/25 PHP
Thinkphp自定义生成缩略图尺寸的方法
2019/08/05 PHP
IE和Mozilla的兼容性汇总event
2007/08/12 Javascript
一段利用WSH修改和查看IP配置的代码
2008/05/11 Javascript
修复IE9&safari 的sort方法
2011/10/21 Javascript
浅谈javascript的原型继承
2012/07/25 Javascript
jQuery学习笔记之jQuery动画效果
2013/09/09 Javascript
详解jquery中$.ajax方法提交表单
2014/11/03 Javascript
网页中表单按回车就自动提交的问题的解决方案
2014/11/03 Javascript
JavaScript常用脚本汇总(三)
2015/03/04 Javascript
自己动手写的jquery分页控件(非常简单实用)
2015/10/28 Javascript
深入浅析Node.js 事件循环
2015/12/20 Javascript
jQuery获取父元素及父节点的方法小结
2016/04/14 Javascript
vue中设置、获取、删除cookie的方法
2018/09/21 Javascript
vuex 解决报错this.$store.commit is not a function的方法
2018/12/17 Javascript
JS div匀速移动动画与变速移动动画代码实例
2019/03/26 Javascript
LayUI动态设置checkbox不显示的解决方法
2019/09/02 Javascript
javascript实现动态时钟的启动和停止
2020/07/29 Javascript
webpack打包html里面img后src为“[object Module]”问题
2019/12/22 Javascript
JavaScript定时器使用方法详解
2020/03/26 Javascript
vue 弹出遮罩层样式实例
2020/07/22 Javascript
[01:10]DOTA2次级职业联赛 - EP战队宣传片
2014/12/01 DOTA
[59:30]完美世界DOTA2联赛PWL S3 access vs LBZS 第二场 12.20
2020/12/23 DOTA
理解Python中函数的参数
2015/04/27 Python
python中 chr unichr ord函数的实例详解
2017/08/06 Python
通过Python实现自动填写调查问卷
2017/09/06 Python
Scrapy-Redis结合POST请求获取数据的方法示例
2019/05/07 Python
JAVA及PYTHON质数计算代码对比解析
2020/06/10 Python
浪漫婚礼主题活动策划方案
2014/09/15 职场文书
消防验收申请报告
2015/05/15 职场文书
孝女彩金观后感
2015/06/10 职场文书
在职证明书模板
2015/06/15 职场文书
观看《信仰》心得体会
2016/01/15 职场文书
六五普法学习心得体会
2016/01/21 职场文书
《圆的面积》教学反思
2016/02/19 职场文书
利用python调用摄像头的实例分析
2021/06/07 Python