使用Python爬取网页中的表格保存到word

article/2025/5/18 9:14:13

经常遇到的是爬取网页写入表格中,保存为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中")

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

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

转载注明原作者


http://chatgpt.dhexx.cn/article/AuqByucD.shtml

相关文章

python爬取网页表格数据并写入到excel

python爬取网页表格数据并写入到excel 获取银行网页中外汇数据: http://fx.cmbchina.com/Hq/History.aspx?nbr%e7%be%8e%e5%85%83&startdate2009-01-01&enddate2021-10-22&page1 代码如下: import datetime import reimport openpyxl …

Python 爬取网页标签内数据

1、先看运行效果,左边为运行后的结果,右边为爬取的网页内容 2、先展示代码 import requests from lxml import etree#爬取的网址 url https://sh.fang.anjuke.com/?fromnavigation #请求头 header{"user-agent": "Mozilla/5.0 (Window…

Python爬取网页文本内容

# -*- coding: utf-8 -*- from bs4 import BeautifulSoupdef second_pro(text):last_sen []while 1:last_sen.append(text.split(",")[-1])other_list text.split(",")[:-1]# 特定位置超长,需要处理if len(other_list) 1:last_sen.append(ot…

python爬取网页时,编码出错问题

在使用python进行爬取问题时,容易出现编码错误的情况,如: UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\xb9’ in position 61513: illegal multibyte sequence 程序代码: headers {"User-Agent":"Mozi…

python爬取网页图片详解

文章目录 什么是爬虫爬取网页图片实现步骤第一步:打开所操作的网站(任意一个网站)第二步:通过python访问这个网站第三步:点击F12查询相关信息第四步:爬取图片,下载到本地第五步:显示…

python爬取网页信息

PythonSpider项目 Python爬虫是用Python编程语言实现的网络爬虫,主要用于网络数据的抓取和处理,相比于其他语言,Python是一门非常适合开发网络爬虫的编程语言,大量内置包,可以轻松实现网络爬虫功能。Python爬虫可以做…

python爬取网页图片

python爬取网页图片 爬取数据一般分为三步: 爬取网页信息解析爬取来的数据保存数据 找到自己想要爬取的网页,找到user-agent 代码实现 首先导入需要用到的包 from bs4 import BeautifulSoup #网页解析,获取数据 import re #正…

走好这六步,python爬虫爬取网页数据手到擒来~

前言: 用python的爬虫爬取数据真的很简单,只要掌握这六步就好,也不复杂。以前还以为爬虫很难,结果一上手,从初学到把东西爬下来,一个小时都不到就解决了。 python爬虫六步走 第一步:安装requ…

css样式优先级详解

很多人在写代码的过程中会出现css样式冲突的情况,那么我们怎样才能应用我们想用的样式,下面就个人经验写了一点总结! 1.权值(浏览器是根据权值来判断使用哪种css样式的,哪种样式权值高就使用哪种样式) ①标…

css样式优先级问题

此片博客为参考博客&#xff0c;更多详情可看:https://www.cnblogs.com/ombre/p/7418667.html 官方表述的CSS样式优先级如下: 通用选择器(*&#xff09;<元素(类型)选择器<类名选择器<属性选择器<伪类选择器<ID选择器<内联样式 其中内联样式只能通过style&…

前端基础-CSS样式的优先级

样式的优先级&#xff08;了解&#xff09; 1.强制优先级&#xff08;important&#xff09; 语法&#xff1a;样式属性:值 !important; 示意图 注意&#xff1a;只针对当前这一条css属性 2.选择器优先级 伪对象选择器>!important>行内样式>id选择器>class选…

HTML——CSS样式优先级

代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, initia…

关于CSS样式优先级

设定Li 当中的a链接样式的时候&#xff0c;设了几次没成功。考虑跟优先级有关。转载这篇文章&#xff0c;供自己记录学习&#xff0c;与新手们讨论交流 一般情况下&#xff1a; [1位重要标志位] > [4位特殊性标志] > 声明先后顺序 !important > [ id > class &g…

JavaWeb_CSS(5)_样式优先级

本系列博客汇总在这里&#xff1a;JavaWeb_CSS 汇总 目录 样式优先级示例 样式优先级 由上到下&#xff0c;由外到内。优先级由低到高。 示例 CSS 文件1p {text-align: center;color: red; }CSS 文件2p {text-align: center;color: green; }/*div 表示 p 标签往内一层*/ d…

CSS 样式优先级权重

CSS的样式优先级可分为四大类&#xff1a; 1、&#xff01;important 无论何种引入方式和选择器&#xff0c;优先级都是最高的&#xff1b; 2、行内样式 style"" 行内样式的优先级要高于嵌入和外链&#xff0c;嵌入和外链如果使用的选择器相同就看他们在页面中插…

html中css样式的优先级规则

CSS2.1 中规定了关于 CSS 规则 Specificity&#xff08;特异性&#xff09;的计算方式&#xff0c;用一个四位的数字串&#xff08;注&#xff1a;CSS2 中是用三位&#xff09;来表示&#xff0c;最后以 Specificity 的高低判断 CSS 的优先权。Specificity 具体的计算规则&…

WEB前端--CSS样式优先级

出处&#xff1a; http://xugang.cnblogs.com 样式的优先级 多重样式&#xff08;Multiple Styles&#xff09;&#xff1a;如果外部样式、内部样式和内联样式同时应用于同一个元素&#xff0c;就是使多重样式的情况。 一般情况下&#xff0c;优先级如下&#xff1a; &#…

CSS的样式与优先级

上节我们学习了三种CSS修饰html的三种方式&#xff1a;内部样式-外部样式-行内样式 那他们有没有优先级之分那&#xff1f;是有的&#xff0c;我们可以了解一下他们同时修改样式是怎么样的优先级 首先在书写的格式上我们的书写顺序排序是&#xff1a;行内-外部-内部 一般都要按…

【三】CSS之样式的优先级

【三】CSS之样式的优先级 1 css样式的优先级 css在使用过程中&#xff0c;因为很多的选择符有具有批量查找的特点&#xff0c;所以很容易出现样式污染的问题。样式污染出现的原因是因为css代码编写过程中&#xff0c;因为引入方式、书写先后顺序以及选择符的优先级等问题导致的…

【CSS】样式优先级

找了好多资料&#xff0c;真是什么样的答案都有&#xff0c;所以自己收集整理了一下。 优先级从高到低如下&#xff1a; &#xff01;important行内样式id选择器类选择器属性选择器伪类选择器标签选择器伪元素选择器 参考&#xff1a;CSS 样式优先级 | 菜鸟教程 (runoob.com)…