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

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

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

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

转载注明原作者

  • 8
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
使用Python爬虫爬取在线表格,可以借助requests库发送网络请求,获取网页的HTML内容。然后使用parsel库对HTML进行解析,提取出表格数据。接下来,可以使用pandas库将表格数据转换为DataFrame对象,方便后续的数据处理和分析。最后,可以使用python-docx库创建一个新的Word文档,并将表格数据写入到文档。 下面是一个示例代码,演示了如何使用Python爬虫爬取在线表格并将数据写入Word文档: ```python import requests from parsel import Selector import pandas as pd from docx import Document # 发送网络请求,获取网页内容 url = "https://example.com/table.html" # 替换成实际的表格网址 response = requests.get(url) html = response.text # 使用parsel解析HTML,提取表格数据 selector = Selector(html) table = selector.xpath("//table") rows = table.xpath(".//tr") data = [] for row in rows: cells = row.xpath(".//td/text()").getall() data.append(cells) # 将数据转换为DataFrame对象 df = pd.DataFrame(data) # 创建一个新的Word文档 doc = Document() # 写入标题 doc.add_heading("Table Data", level=1) # 写入表头 table_head = doc.add_table(rows=1, cols=len(df.columns)) for i, header in enumerate(df.columns): table_head.cell(0, i).text = header # 写入表格数据 table_body = doc.add_table(rows=len(df), cols=len(df.columns)) for i, row in enumerate(df.values): for j, value in enumerate(row): table_body.cell(i, j).text = str(value) # 保存Word文档 doc.save("table_data.docx") ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值