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实现文本文件合并
Dec 29 Python
Python实现拷贝多个文件到同一目录的方法
Sep 19 Python
windows10下python3.5 pip3安装图文教程
Apr 02 Python
Python中浅拷贝copy与深拷贝deepcopy的简单理解
Oct 26 Python
python导入pandas具体步骤方法
Jun 23 Python
django框架使用方法详解
Jul 18 Python
tensorflow 自定义损失函数示例代码
Feb 05 Python
Python面向对象程序设计之继承、多态原理与用法详解
Mar 23 Python
Jupyter Notebook的连接密码 token查询方式
Apr 21 Python
python使用nibabel和sitk读取保存nii.gz文件实例
Jul 01 Python
selenium.webdriver中add_argument方法常用参数表
Apr 08 Python
Python 内置函数速查表一览
Jun 02 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
声音就能俘获人心,蕾姆,是哪个漂亮小姐姐配音呢?
2020/03/03 日漫
用PHP编写PDF文档生成器
2006/10/09 PHP
将数组写入txt文件 var_export
2009/04/21 PHP
php表单转换textarea换行符的方法
2010/09/10 PHP
浅谈php冒泡排序
2014/12/30 PHP
PHP中Closure类的使用方法及详解
2015/10/09 PHP
JQuery 1.6发布 性能提升,同时包含大量破坏性变更
2011/05/10 Javascript
JavaScript使用ActiveXObject访问Access和SQL Server数据库
2015/04/02 Javascript
AngularJS 模块化详解及实例代码
2016/09/14 Javascript
js 中获取制定的cook信息实现方法
2016/11/19 Javascript
JS文件/图片从电脑里面拖拽到浏览器上传文件/图片
2017/03/08 Javascript
详解vue 模版组件的三种用法
2017/07/21 Javascript
原生JS实现$.param() 函数的方法
2018/08/10 Javascript
小程序数据通信方法大全(推荐)
2019/04/15 Javascript
详解将微信小程序接口Promise化并使用async函数
2019/08/05 Javascript
基于Vue和Element-Ui搭建项目的方法
2019/09/06 Javascript
微信内置浏览器图片查看器的代码实例
2019/10/08 Javascript
微信小程序 scroll-view 水平滚动实现过程解析
2019/10/12 Javascript
js实现固定区域内的不重叠随机圆
2019/10/24 Javascript
Python中的异常处理简明介绍
2015/04/13 Python
python调用xlsxwriter创建xlsx的方法
2018/05/03 Python
对Python 2.7 pandas 中的read_excel详解
2018/05/04 Python
Django如何配置mysql数据库
2018/05/04 Python
python实现逆序输出一个数字的示例讲解
2018/06/25 Python
Django进阶之CSRF的解决
2018/08/01 Python
Python sorted对list和dict排序
2020/06/09 Python
django教程如何自学
2020/07/31 Python
佳能德国网上商店:Canon德国
2017/03/18 全球购物
实习心得体会
2014/01/02 职场文书
给校长的一封建议书
2014/03/12 职场文书
民主评议政风行风活动心得体会
2014/10/29 职场文书
归元寺导游词
2015/02/06 职场文书
2015年后勤工作总结范文
2015/04/08 职场文书
导游词之舟山普陀山
2019/11/06 职场文书
CSS预处理框架——Stylus
2021/04/21 HTML / CSS
java设计模式--建造者模式详解
2021/07/21 Java/Android