引言
因项目需要,我计划从北大法宝下载一些法律法规文本,仅以此文记录我的心得体会。本文不会将项目涉及到的所有源代码都直接挂出来,只贴一些代码片段,聪明的你应该能够很轻松地把代码片段连成可用的完整脚本。
模拟登录
北大法宝的大部分功能都需要在登录状态下使用,我新注册的账号可以有7天的试用期,非常不错,美滋滋。如果老铁们愿意花点小钱的话,可以在某平台上买到一个可用的账号。
浏览器上的登录过程就不说了,只说一下python的模拟登录。
北大法宝的模拟登录非常简单,只要发送下面这个POST请求就可以了,可以看到用户名和密码都是以明文形式传递的。
使用requests
的Session()
发送这个POST请求,就可以让服务器记住登录状态了。
def login(self, username, password):
'''
登录北大法宝,需要提供用户名与密码
:param username: 用户名
:param password: 与用户名相对应的密码
:return None: Session会自动保持登录状态
'''
# 登录网址
url = "https://login.pkulaw.com/login"
# 使用Session发送POST请求,登录北大法宝
self.s.post(url=url, data = {
"LoginName": username, "LoginPwd": password}, headers=self.headers)
浏览器中的批量下载
如果要下载某个主题的法律法规文本,显然,我们需要向服务器提供一个关键词。在浏览器中的操作是:在搜索框内输入你感兴趣的关键词,然后回车。
我以开发区为关键词,敲完回车以后,浏览器告知我,它检索到了482篇文本。如下图所示:
我们勾选上图中的全选框,然后点击批量下载,会出现下面的弹窗:
点击确定按钮以后,就下载了一个压缩包。有一个小问题是,这里虽然说是全选,但实际上只选了八份文件。因为当前页面就只放了八份文件,如下图所示:
不过还好,上图中有一个更多按钮可以点,点一下这个更多按钮,我们就能拿到更多的文本了。
从图中能够看出,当前检索出来的内容是行政法规这个小类,除行政法规外,还有司法解释、部门规章、行业规定等。虽然当前页面显示的内容的范围变窄了,但是可以一次性下载100篇文本了,还是非常不错的。
如果只是简单地下载几百篇文本,手动下载挺好的,比脚本快得多。但如果下载的量比较多,这种机械性的重复难免会让人有些难受。下面来说说如何用脚本完成批量下载任务。
python实现批量下载
我们按照上面的流程一直走到点击确认按钮这一步,此时只要一点击这个确认按钮,浏览器就会下载压缩包。我们在点击确认按钮之前打开开发者工具,看看浏览器向服务器发送了什么请求,如果能够用脚本复现这个请求,不就能用python实现批量下载了嘛。
比较难受的是,点击完确认按钮以后,浏览器打开了一个新的窗口,下载任务创建完以后,它又自动关掉了。因为开发者工具只能捕获到当前标签页(或许是我不会设置),所以我们是看不到浏览器发送的请求。经百度,浏览器是可以设置成新窗口打开时,