开篇废话(干活请看下个大标题)
近期学习刑法,总结的时候需要用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三列。
不要期望它能把整个矩阵写进去,还是逐个写比较好。
博主在学习刑法时尝试用Python爬虫自动化整理刑法条文到Excel,通过学习openpyxl库,克服了xlrd和xlwt对xlsx支持不足的问题,最终实现将文本数据写入Excel。分享了全代码和使用openpyxl的注意事项,特别是workbook对象的append方法的用法。

1089

被折叠的 条评论
为什么被折叠?



