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使用rabbitmq实现网络爬虫示例
Feb 20 Python
测试、预发布后用python检测网页是否有日常链接
Jun 03 Python
Python随机生成带特殊字符的密码
Mar 02 Python
Ubuntu 下 vim 搭建python 环境 配置
Jun 12 Python
python中文件变化监控示例(watchdog)
Oct 16 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
Nov 11 Python
Python实现常见的回文字符串算法
Nov 14 Python
提升Python程序性能的7个习惯
Apr 14 Python
Python内置方法实现字符串的秘钥加解密(推荐)
Dec 09 Python
解决import tensorflow as tf 出错的原因
Apr 16 Python
django template实现定义临时变量,自定义赋值、自增实例
Jul 12 Python
解决python的空格和tab混淆而报错的问题
Feb 26 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转成EXE文件
2006/10/09 PHP
树型结构列出指定目录里所有文件的PHP类
2006/10/09 PHP
解析yii数据库的增删查改
2013/06/20 PHP
CI框架(CodeIgniter)实现的数据库增删改查操作总结
2018/05/23 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
浅析JavaScript事件和方法
2015/02/28 Javascript
Javascript获取表单名称(name)的方法
2015/04/02 Javascript
javascript清空table表格的方法
2015/05/14 Javascript
JS实现图文并茂的tab选项卡效果示例【附demo源码下载】
2016/09/21 Javascript
JavaScript 数组的深度复制解析
2016/11/02 Javascript
jquery 判断div show的状态实例
2016/12/03 Javascript
Vue实现购物车功能
2017/04/27 Javascript
import与export在node.js中的使用详解
2017/09/28 Javascript
JS实现的邮箱提示补全效果示例
2018/01/30 Javascript
微信小程序-form表单提交代码实例
2019/04/29 Javascript
vue-cli配置flexible过程详解
2019/07/04 Javascript
JavaScript前端页面搜索功能案例【基于jQuery】
2019/07/10 jQuery
vue柱状进度条图像的完美实现方案
2019/08/26 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
2019/09/27 Javascript
antd日期选择器禁止选择当天之前的时间操作
2020/10/29 Javascript
[01:10:49]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
[01:10:27]DOTA2-DPC中国联赛正赛 SAG vs XG BO3 第二场 3月5日
2021/03/11 DOTA
使用Node.js和Socket.IO扩展Django的实时处理功能
2015/04/20 Python
Python中标准库OS的常用方法总结大全
2017/07/19 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
2019/02/21 Python
python实现树的深度优先遍历与广度优先遍历详解
2019/10/26 Python
浅谈python3打包与拆包在函数的应用详解
2020/05/02 Python
python简单实现插入排序实例代码
2020/12/16 Python
美国玛丽莎收藏奢华时尚商店:Marissa Collections
2016/11/21 全球购物
英语专业学生的自我评价
2013/12/30 职场文书
2014物价局民主生活会对照检查材料思想汇报
2014/09/24 职场文书
颐和园英文导游词
2015/01/30 职场文书
python可视化之颜色映射详解
2021/09/15 Python
记一次Mysql不走日期字段索引的原因小结
2021/10/24 MySQL
分享提高 Python 代码的可读性的技巧
2022/03/03 Python
Mysql中@和@@符号的详细使用指南
2022/06/05 MySQL