经常遇到的是爬取网页写入表格中,保存为csv格式、txt格式。最近接到一个任务,复制网页中文字和表格保存到word中,不仅有文字,还有表格。一看有100多页,要是一页一页的复制,要干到什么年月啊。 经过一番搜索,发现还真有一个库可以处理word文档,一颗悬着的心稍稍有了安慰。

本次爬取数据导入到word中,需要用到Python-docx库。

先来说说爬虫思路:

  1. 请求网页

  2. 解析网页,提取数据

    提取网页中的标题、表头、表格

  3. 写入word

  4. 保存数据

本次爬取的网页是“某统计信息网”,爬取“ 2022年1-2月主要统计指标”,目标网址是广东省统计局-2022年1-2月广东主要统计指标。

网页长这样,有标题、表头、表格。

1、安装库

安装Python-docx库, 使用pip下载。

把Python -docx官方文档的链接也放上来: python-docx — python-docx 0.8.11 documentation

win键+R打开运行窗口,在运行窗口中进行命令的输入以及打开软件或工具,输入CMD,用来打开命令提示符窗口。‍进入命令行界面,输入以下代码,等待安装完成即可使用。

pip install python-docx

2.导入库文件

本次需要用requests、parsel、pandas、docx等库。

#-*- coding:utf-8 -*-
import requests
from parsel import Selector
import pandas as pd
from docx import Document

3.请求网页

使用requests库的get()方法获取网页。

# 1.获取网页数据
url = "http://stats.gd.gov.cn/gmjjzyzb/content/post_3900512.html"
# 请求头信息
header = {'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Mobile Safari/537.36'
}
# 请求数据
response = requests.get(url, headers=header)
# 查看请求数据的结果的状态码
print(response.status_code)

response库的status_code状态码200,代表获取网页成功。

4.解析网页,提取数据。

这里我们采用parsel库的xpath方法解析网页,使用selector将网页转换为可解析对象。

# 解析网页,爬取标题、表头和表格
selector = Selector(response.text)

使用xpath方法定位网页元素,提取标题、表格、表头等数据。

获取表格采用pandas的read_html方法来爬取,非常高效、容易编写。

提取表格的表头并转换为列表,便于后面的写入word中提供遍历。

在浏览器中选中“2022年1-2月广东主要统计指标"右击鼠标,单击”检查“,定位元素位置,编写xpath提取语句"//*[@class='main']/h4/text()"。

# 获取标题
page_header = selector.xpath("//*[@class='main']/h4/text()").extract()
# 获取表格
df = pd.read_html(url, encoding='utf-8',header=0)[1]
# 重新设置行索引,行索引从1开始
df.index = df.index +1
# 获取表头
tabel_header = list(df.columns)

已经获取到网页的标题、表格等数据,接下来写入到word中。

5.将数据写入word中并保存

使用python-docx库的Document()方法打开一个文档。我们的目标是写入标题、表头、表格。

使用document库add_heading方法,写入标题。

#打开文档
document = Document()
#写入文档标题
text = page_header[0]
document.add_heading(text=text,level=1)

定义写入文档函数df_toword,向文档中写入表头、单元格值,并保存为word格式。

这里需要强调的是,需要分开写入表头和单元格值,先写入表头,再写入单元格中的值。

该部分代码如下:

# 3 写入文档
def df_toword():#增加表格t = document.add_table(df.shape[0]+1, df.shape[1],style='Table Grid')#写入列名hdr_cells = t.rows[0].cellsfor i in range(len(tabel_header)):hdr_cells[i].text = tabel_header[i]# 写入单元中的值for i in range(df.shape[0]):for j in range(df.shape[1]):t.cell(i+1,j).text = str(df.values[i,j]) # 保存到指定文件        document.save(u'data.docx')   

6.执行程序

我们已经完成了请求网页、解析网页、提取数据、写入文档等功能,终于到了执行环节,怀着一颗激动的心,测试下程序是否可行。

# 执行程序
df_toword()
print("网页已下载到word中")

打开下载好的文档看看效果怎么样,标题、表头、表格都有,达到了预期目标。文档中的数据是表格格式,在文档中加上网格线就和网页中的一样。

好了,本次的分享就到这里了。

转载注明原作者

使用Python爬取网页中的表格保存到word相关推荐

  1. python爬取图片-Python爬取网页中的图片(搜狗图片)详解

    前言 最近几天,研究了一下一直很好奇的爬虫算法.这里写一下最近几天的点点心得.下面进入正文: 你可能需要的工作环境: Python 3.6官网下载 本地下载 我们这里以sogou作为爬取的对象. 首先 ...

  2. r语言html爬虫,如何用R语言爬取网页中的表格

    今天我们要讲怎么样用R写一个小的爬虫,来爬取网页中的表格.这里的网页指html页面.稍微百度一下大家就可以知道,html是一种高度结构化的文本标记语言.html表格所用的标签是 . 所以我们的思路大概 ...

  3. beautifulsoup爬取网页中的表格_用 Python 爬取网页

    来自公众号:优达学城Udacity 作者:Kerry Parker 编译:欧剃 作为数据科学家的第一个任务,就是做网页爬取.那时候,我对使用代码从网站上获取数据这项技术完全一无所知,它偏偏又是最有逻辑 ...

  4. beautifulsoup爬取网页中的表格_PYTHON爬取数据储存到excel

    PYTHON爬取数据储存到excel 大家周末好呀,我是滑稽君.前两天上网课时朋友发来消息说需要爬取一些数据,然后储存到excel里.记得我公众号里发过关于爬虫的文章,所以找我帮个忙.于是滑稽君花时间 ...

  5. Python爬取网页中表格数据并导出为Excel文件

    本文使用自己创建的网页进行模拟和演示,在爬取真实网页时,分析网页源代码然后修改代码中的正则表达式即可. 假设某网页源代码为: 在Hbuilder中单击菜单"运行",选择使用Goog ...

  6. php抓取搜狗图片,Python爬取网页中的图片(搜狗图片)详解

    前言 最近几天,研究了一下一直很好奇的爬虫算法.这里写一下最近几天的点点心得.下面进入正文: 你可能需要的工作环境: 我们这里以sogou作为爬取的对象. 首先我们进入搜狗图片http://pic.s ...

  7. beautifulsoup爬取网页中的表格_Python爬虫爬取BT之家找电影资源

    一.写在前面 最近看新闻说圣城家园(SCG)倒了,之前BT天堂倒了,暴风影音也不行了,可以说看个电影越来越费力,国内大厂如企鹅和爱奇艺最近也出现一些幺蛾子,虽然目前版权意识虽然越来越强,但是很多资源在 ...

  8. beautifulsoup爬取网页中的表格_python爬取哔哩哔哩网页弹幕内容,并将爬取的内容以五角星的形式显示出来...

    转载:03 爬虫实例-获取网页弹幕内容 思路: 向哔哩哔哩网站发送请求 请求成功后,解析爬取的弹幕内容保存到一个文件中 读取文件并分析弹幕内容中词组或文字出现的频率 将这些词组或文字组成五角星图形 组 ...

  9. Python爬取淘宝商品信息保存到Excel

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...

最新文章

  1. Linux 最常用命令整理,建议收藏!
  2. java参数传递(超经典)
  3. 神经网络与机器学习 笔记—基本知识点(上)
  4. Vue.js 生产环境部署
  5. python3中类的继承
  6. django-分页自带的分页-自定义分页
  7. MySQL远程实时备份binlog
  8. python导入math函数取一随机数返回其平方根_Python数字
  9. 《2019年数据及存储发展研究报告》十大洞察
  10. C++之const类成员变量,const成员函数
  11. mysql中名词解析
  12. 搜狗双拼输入法--快速入门
  13. 【无标题】CentOS7 安装 向日葵 远程工具
  14. pycharm主题背景图片设置,让你的界面酷起来!
  15. 【单片机开发】OV2640在没有DCMI接口的情况下的STM32驱动
  16. 伴性遗传-基因型频率和基因频率
  17. 有什么软件可以搜JAVA题答案_可以搜简答题答案及解析的软件app或者公众号有吗?...
  18. The last dimension of the inputs to `Dense` should be defined. Found `None`.
  19. xmanager 5下载安装
  20. c++求先序排列 [NOIP2001 普及组]

热门文章

  1. 学校计算机语音室管理制度,多媒体、语音室管理制度
  2. JS高阶编程之柯理化函数
  3. 转:为什么领导没时间,下属没事做?
  4. 人人都是产品经理(创新版)
  5. NSObject头文件解析 / 消息机制 / Runtime解读 (一)
  6. MySQL NOW() 是否包含夏令时
  7. 【oh-my-zsh】打造强大又美观的linux终端
  8. Python单细胞分析数据结构——AnnData
  9. 14期《梅花香自苦寒来》12月刊
  10. pandas填补缺失值的方法