Web 自动化下载及转换Word自动排版

   Web 自动化下载及转换 Word 的应用,主要涉及到爬虫技术的应用和 docx 的应用。通过爬虫的应用,能快速把你想搜集的内容以及图片,视频等下载,利用 docx实现对Word的自动排版等功能。假如一个web里,包括几十,甚至上百段的文字和图片,如果我们通过人手去复制文字到word,然后还要把图片逐个保存在自己的电脑,然后再在word逐个导入,到最后还要花大量的时间去排版,又或者我们只需要其中的部分内容,要慢慢去找到相关的内容,这是多么费劲,而且还有出错的可能性。
因此通过爬虫结合docx就可以实现秒完成加载保存。


   以 图1,图2为例,在Web中,有 text 和 图片并存。


   1. 怎样获取正文html内容? 创建一个 split_text_by_img()函数,params分别为 html 和 imglist, 作用就是以图片为分割参照物,最后返回每段正文内容的html,具体代码如下:


def split_text_by_img(html,imglist): 
  content_parts = [] 
  for imgtag in imglist: 
    html = str(html)                         # 把html转换成str,为split做铺垫
    str_tmp = html.split(str(imgtag))[0]     # 提取图片前的正文内容的html,添加到 content_parts 这个 lst 里
    content_parts.append(str_tmp)              
    
    html = html.replace((str_tmp + str(imgtag)),'')  # 把上一个的正文和图片删除,把最新的html成为下一个循环遍历的html
  content_parts.append(html)                         # 如果最后一个图片后还有正文内容,需要把最后置换剩下的html加回到content_parts lst里 
  return content_parts                               # 返回 N 或者 (N+1) 个元素(正文内容的html) 的 lst 

  2. 怎样获取图片?创建一个pic的函数,params 分别为 feferer_url 和 pic_url, 其中referer的作用是,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。headers具体结构,如图3,具体代码如下:


def pic(referer_url,pic_url): 
  headers = { "Accept":"text/html,application/xhtml+xml,application/xml;",
              "Accept-Encoding":"gzip,deflate",
              "Accept-Language":"zh-CN,zh;q=0.9",
              "Referer":referer_url,
              "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36"
              }

  img_name = pic_url.split('/')[-1]+'.jpg'     # 把图片链接分割,取反向索引-1 为文件名
 
    
  with open(img_name,'wb')as f:
   response = requests.get(pic_url,headers=headers).content
   f.write(response)
   return img_name                               #把图片链接写入二进制文件并保存为图片 


  3. 对指定 url 解析后,获取 title标签、整段正文的标签,以及所有图片的标签 lst, 代码如下:




url = 'xxxx '     # 填写实际的url 
html = requests.get(url).content
soup = BeautifulSoup(html,'html.parser')  # 解析html

title = soup.title.string   #取得title标签的文字内容
post_detial = soup.find('div',id='sina_keyword_ad_area2') # 获取整个正文的段落标签,如图4

img_tag_list = post_detial.select('a>img ') #获取所有图片img的标签list


  4. 调用 split_text_by_img函数


  5. 通过循环,调用2个主函数去实现word的自动添加正文和图片,并自动排版,保存。


new_text = split_text_by_img(post_detial,img_tag_list)  



document = Document()        # 创建文档对象
document.add_heading(title)  # 添加标题

i = 0                        # 设循环初始值为0 

for part in new_text: 
  part='<html><body><div>' + part  # part是含html标签的字符串,调用BeautifuSoup时需要lxml格式化,需要加前缀,否则处理的时候会把第二部分开始的内容处理为空
  part_tag = BeautifulSoup(part,'lxml')
  document.add_paragraph(part_tag.get_text())         # 调用document.add_paragraph()方法,向文档里添加文字
  
  if (i < len(img_tag_list)):
    imgurl = img_tag_list[i].get('real_src')          # 提取图片属性值,如图5
    img_name =  pic('http://blog.sina.com.cn',imgurl) # 调用pic()函数
    document.add_picture(img_name)                    # 调用document.add_picture()方法,向文档里添加图片
    
  i=i+1
  
document.save(title+'.doc')                          # 保存为标题命名的word file 


图1

在这里插入图片描述


图2

在这里插入图片描述


图3

在这里插入图片描述


图4

在这里插入图片描述


图5
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值