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中itertools模块用法详解
Sep 25 Python
Python中的anydbm模版和shelve模版使用指南
Jul 09 Python
Python实现简单的获取图片爬虫功能示例
Jul 12 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
May 29 Python
Python实现根据日期获取当天凌晨时间戳的方法示例
Apr 09 Python
Python简易版图书管理系统
Aug 12 Python
Python字典生成式、集合生成式、生成器用法实例分析
Jan 07 Python
Python Selenium 设置元素等待的三种方式
Mar 18 Python
python实现udp传输图片功能
Mar 20 Python
Python selenium模块实现定位过程解析
Jul 09 Python
python 实用工具状态机transitions
Nov 21 Python
python使用pywinauto驱动微信客户端实现公众号爬虫
May 19 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
默默简单的写了一个模板引擎
2007/01/02 PHP
PHP的autoload自动加载机制使用说明
2010/12/28 PHP
Php Image Resize图片大小调整的函数代码
2011/01/17 PHP
php 团购折扣计算公式
2011/11/24 PHP
php中HTTP_REFERER函数用法实例
2014/11/21 PHP
php用户注册时常用的检验函数实例总结
2014/12/22 PHP
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
2015/02/12 PHP
详解PHP中array_rand函数的使用方法
2016/09/11 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
简单实用的js调试logger组件实现代码
2010/11/20 Javascript
多种方法判断Javascript对象是否存在
2013/09/22 Javascript
javascript + jquery实现定时修改文章标题
2014/03/19 Javascript
js点击button按钮跳转到另一个新页面
2014/10/10 Javascript
HTML+CSS+JS实现完美兼容各大浏览器的TABLE固定列
2015/04/26 Javascript
使用DNode实现php和nodejs之间通信的简单实例
2015/07/06 NodeJs
ANGULARJS中使用JQUERY分页控件
2015/09/16 Javascript
设计模式中的组合模式在JavaScript程序构建中的使用
2016/05/18 Javascript
微信小程序 MD5加密登录密码详解及实例代码
2017/01/12 Javascript
Angular在模板驱动表单中自定义校验器的方法
2017/08/09 Javascript
解决vuejs项目里css引用背景图片不能显示的问题
2018/09/13 Javascript
详解Next.js页面渲染的优化方案
2019/01/27 Javascript
Layui Form 自定义验证的实例代码
2019/09/14 Javascript
HTML+JavaScript实现扫雷小游戏
2019/09/30 Javascript
python实现删除文件与目录的方法
2014/11/10 Python
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
Python打包可执行文件的方法详解
2016/09/19 Python
Python内建函数之raw_input()与input()代码解析
2017/10/26 Python
opencv改变imshow窗口大小,窗口位置的方法
2018/04/02 Python
解决在pycharm运行代码,调用CMD窗口的命令运行显示乱码问题
2019/08/23 Python
python打印异常信息的两种实现方式
2019/12/24 Python
基于Python实现2种反转链表方法代码实例
2020/07/06 Python
详解HTML5中download属性的应用
2015/08/06 HTML / CSS
阿迪达斯芬兰官方网站:adidas芬兰
2017/01/30 全球购物
成人大专生实习期的自我评价
2013/10/02 职场文书
青年标兵事迹材料
2014/08/16 职场文书
Golang 语言控制并发 Goroutine的方法
2021/06/30 Golang