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使用MD5加密字符串示例
Aug 22 Python
Python 装饰器深入理解
Mar 16 Python
使用Python对SQLite数据库操作
Apr 06 Python
python密码错误三次锁定(实例讲解)
Nov 14 Python
Python通过paramiko远程下载Linux服务器上的文件实例
Dec 27 Python
python实现翻译word表格小程序
Feb 27 Python
Python序列化pickle模块使用详解
Mar 05 Python
Django自定义全局403、404、500错误页面的示例代码
Mar 08 Python
django配置app中的静态文件步骤
Mar 27 Python
Matplotlib自定义坐标轴刻度的实现示例
Jun 18 Python
matplotlib更改窗口图标的方法示例
Feb 03 Python
Python使用openpyxl复制整张sheet
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压缩多个CSS为一个css的代码并缓存
2011/04/21 PHP
PHP 第一节 php简介
2012/04/28 PHP
tp5.1 框架路由操作-URL生成实例分析
2020/05/26 PHP
PHP array_reverse() 函数原理及实例解析
2020/07/14 PHP
JQuery与iframe交互实现代码
2009/12/24 Javascript
jQuery学习2 选择器的使用说明
2010/02/07 Javascript
Node.js编码规范
2014/07/14 Javascript
js键盘事件的keyCode
2014/07/29 Javascript
JavaScript实现简单的二级导航菜单实例
2015/04/15 Javascript
js实现选中复选框文字变色的方法
2015/08/14 Javascript
基于jquery实现全屏滚动效果
2015/11/26 Javascript
整理Javascript基础语法学习笔记
2015/11/29 Javascript
用jQuery旋转插件jqueryrotate制作转盘抽奖
2017/02/10 Javascript
xmlplus组件设计系列之图标(ICON)(1)
2017/05/05 Javascript
nodejs取得当前执行路径的方法
2018/05/13 NodeJs
js实现图片上传并预览功能
2018/08/06 Javascript
vue组件中watch props根据v-if动态判断并挂载DOM的问题
2019/05/12 Javascript
Python strip lstrip rstrip使用方法
2008/09/06 Python
Python程序员鲜为人知但你应该知道的17个问题
2014/06/04 Python
Python使用爬虫猜密码
2016/02/19 Python
Python简单实现安全开关文件的两种方式
2016/09/19 Python
Python XML转Json之XML2Dict的使用方法
2019/01/15 Python
python下的opencv画矩形和文字注释的实现方法
2019/07/09 Python
Python 3.6打包成EXE可执行程序的实现
2019/10/18 Python
Pandas数据离散化原理及实例解析
2019/11/16 Python
NFL墨西哥官方商店:Tienda NFL
2017/11/28 全球购物
有影响力的品牌之家:Our Social Collective
2019/06/08 全球购物
宣传策划类求职信范文
2014/01/31 职场文书
就业协议书范本
2014/04/11 职场文书
师德模范事迹材料
2014/06/03 职场文书
幼儿发展评估方案
2014/06/11 职场文书
南京导游词
2015/02/03 职场文书
求职简历自我评价2015
2015/03/10 职场文书
成品仓库管理员岗位职责
2015/04/09 职场文书
介绍信格式样本
2015/05/05 职场文书
分析Java中Map的遍历性能问题
2021/06/26 Java/Android