Python 刑法文本爬取示例 Excel条款格式 openpyxl写入

博主在学习刑法时尝试用Python爬虫自动化整理刑法条文到Excel,通过学习openpyxl库,克服了xlrd和xlwt对xlsx支持不足的问题,最终实现将文本数据写入Excel。分享了全代码和使用openpyxl的注意事项,特别是workbook对象的append方法的用法。

开篇废话(干活请看下个大标题)

近期学习刑法,总结的时候需要用Excel表将刑法条文分条列出,在手动复制粘贴了半个小时后想到用爬虫来解决,才接触过requests库,有了想法后便去MOOC听了会儿爬虫,只讲了下载文本和图片,没讲到编辑Excel这种文件。

于是就bing了一系列博客,下载了xlrd,xlwt,后来发现它们打不开xlsx格式,而且写入操作看教程觉得鸡肋。又学习了beautifulsoup,研究了正则表达式,查看了openpyxl的说明文档。磕磕绊绊七个小时,终于写出了这几十行代码。

其实如果只是要求文本,获得soup之后取soup.text写入txt文件即可。

效果图

全代码

import requests
import openpyxl
from bs4 import BeautifulSoup

header={
	"User-Agent":"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36"
}
url = "http://search.chinalaw.gov.cn/law/searchTitleDetail?LawID=332932&Query=%E5%88%91%E6%B3%95&IsExact=&PageIndex="
root = "C://Users//Administrator//Desktop//"
#打开文件
excel = openpyxl.load_workbook(r'C:\Users\Administrator\Desktop\Xingfa.xlsx')
#获取sheet
table = excel.get_sheet_by_name('Sheet1')#通过表名获取
a = 0#条号
b = 0#款号
txt_list = [['条','款','内容']]

#46页网页
for page in range(47):
	urlp = url + str(page)
	try:
		r = requests.get(urlp,headers=header)#获取响应
		soup = BeautifulSoup(r.text,"html.parser")
		tr_list = soup.find_all("tr",attrs={"valign":"top"})
		# print(len(tr_list))

		#爬条文
		for i in range(len(tr_list)):
			tr = tr_list[i].contents
			# print(tr)

			if re.search('第.*条',tr[1].text):
				a = a+1
				for y in range(3,len(tr)-1):
					txt = tr[y].text.split()
					for x in range(len(txt)):
						b = b+1
						text = txt[x]
						txt_list.append([a,b,text])
						#print("a: "+str(a)+"b: "+str(b)+text)#ide验证
						
					b = 0	

	except Exception as e:
		raise e

#将列表里的数据逐行写入Excel中
try:
	for row in range(len(txt_list)):
		table.append(txt_list[row])
		excel.save(r'C:\Users\Administrator\Desktop\Xingfa.xlsx')
except Exception as e:
	raise e

关于openpyxl的workbook对象的append用法

上文我的txt_list是个矩阵,也就是[[],[],[]]这种格式。而append方法是将[a,b,c]按照一行分别写进空白处第一行的ABC三列。

不要期望它能把整个矩阵写进去,还是逐个写比较好。

附openpyxl的说明文档地址

https://openpyxl.readthedocs.io/en/stable/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值