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的IDEL增加清屏功能实例
Jun 19 Python
Python基础教程之利用期物处理并发
Mar 29 Python
python常用函数与用法示例
Jul 02 Python
简单了解python关系(比较)运算符
Jul 08 Python
简单了解django缓存方式及配置
Jul 19 Python
Django认证系统实现的web页面实现代码
Aug 12 Python
在 Linux/Mac 下为Python函数添加超时时间的方法
Feb 20 Python
Python标准库:内置函数max(iterable, *[, key, default])说明
Apr 25 Python
利用python绘制正态分布曲线
Jan 04 Python
Python与C/C++的相互调用案例
Mar 04 Python
将Python代码打包成.exe可执行文件的完整步骤
May 12 Python
Python Django获取URL中的数据详解
Nov 01 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实现提取一个图像文件并在浏览器上显示的代码
2012/10/06 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
2013/11/26 PHP
php使用curl实现简单模拟提交表单功能
2017/05/15 PHP
弹出广告特效(一个IP只弹出一次)的代码
2007/07/27 Javascript
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
2013/11/14 Javascript
快速入门Vue
2016/12/19 Javascript
jQuery实现的页面遮罩层功能示例【测试可用】
2017/10/14 jQuery
基于Vue渲染与插件的加载顺序的问题详解
2018/03/05 Javascript
bootstrap自定义样式之bootstrap实现侧边导航栏功能
2018/09/10 Javascript
微信公众平台 发送模板消息(Java接口开发)
2019/04/17 Javascript
Angular实现svg和png图片下载实现
2019/05/05 Javascript
Vue Router 实现动态路由和常见问题及解决方法
2020/03/06 Javascript
微信小程序实现聊天室
2020/08/21 Javascript
Python 爬虫爬取指定博客的所有文章
2016/02/17 Python
centos6.7安装python2.7.11的具体方法
2017/01/16 Python
Python实现单词翻译功能
2017/06/06 Python
python 统计数组中元素出现次数并进行排序的实例
2018/07/02 Python
python读取几个G的csv文件方法
2019/01/07 Python
python 杀死自身进程的实现方法
2019/07/01 Python
python关于矩阵重复赋值覆盖问题的解决方法
2019/07/19 Python
python实现倒计时小工具
2019/07/29 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
2019/08/27 Python
python梯度下降算法的实现
2020/02/24 Python
python实现坦克大战
2020/04/24 Python
Python 如何批量更新已安装的库
2020/05/26 Python
新手学python应该下哪个版本
2020/06/11 Python
用CSS3的box-reflect来制作倒影效果
2016/11/15 HTML / CSS
非常详细的C#面试题集
2016/07/13 面试题
学校安全教育制度
2014/01/31 职场文书
募捐倡议书
2014/04/14 职场文书
《青山处处埋忠骨》教学反思
2014/04/22 职场文书
学生会竞选演讲稿纪检部
2014/08/25 职场文书
行风评议整改报告
2014/11/06 职场文书
2015庆祝七一建党节94周年活动总结
2015/03/20 职场文书
redis数据一致性的实现示例
2022/03/18 Redis
JS高级程序设计之class继承重点详解
2022/07/07 Javascript