js 取闭合标签正则_只需一行正则即可爬取某高校就业处通知公告,速进(超简单。)...

点击左上方[蓝色小字],关注[国民程序员]

每天满满的干货

作者:不温卜火

出处:

https://blog.csdn.net/qq_16146103/article/details/109016583

一. 前期准备

说要爬取高校,那肯定要爬高校的,要不然就显的本博主言而无信!但是问题来了,要爬取哪个高校呢?不仅能够成功爬取到信息并且只需要一行正则表达式即可提取到相关信息。这可有点难为住博主了,正在这是 博主想到了自己学校,并且找到了自己学校就业处的网站,通过查看网站规则,发现正好符合规则。当然了博主本人的学校为双非院校,只是一所普通本二院校…Hahahaha… 话不多说,正片正式开始:

  •  1. 分析网页

首先给出我们要爬取的网址:https://zs.hait.edu.cn/list.jsp?urltype=tree.TreeTempUrl&wbtreeid=12619a71ace58db85bc7b8ea0abbe27d00d2.png

我们打开网址以后,页面如上图所示,我们可以看到整个界面上,最多的就是一个又一个的通知公告,那么我们就知道我们需要爬取的内容。下面我们打开开发者选项64de081f36b49c636c77b430c6c78007.png
通过上图,我们可以看到每一个tr标签对应一个通知公告,这个时候我们打开其中一个tr标签进行查看e50d091d9a8a2996e54956d17b1721b3.png
打开之后,我们可以看到我们所需要的所有信息都在a标签内,找到了位置,下面我们就可以进行解析实现了。当然了,博主本人还是更喜欢使用xpath进行解析的。

  •  2. 解析获取标题

下面先让大家看下xpath解析我们所需要的标题的方法:26880a57224492387f796d97fbf7874d.png
怎么样,是不是很简单。但是由于本篇博文是要用正则表达式,所以,博主还是使用正则表达式进行获取标题

14dce97e9ffc43a0fe93ed113980cdc1.png
上述的正则表达式(.*?)代表获取选中部分的所有内容。

如果有小伙伴对正则表达式有不懂的,可以自行查看下博主给的链接https://www.runoob.com/regexp/regexp-syntax.html
当然了,写好了正则表达式当然需要先测试下能否成功获取到我们所需要的内容,下面给出测试结果:529d264163296b70f29990cb5f7ad710.png
?,我们可以看到获取到的结果是正确的,如果正则写的不对的话,需要多次查看调试,这不是什么难活,主要是需要有足够的耐心就够了。

  •  3. 保存到本地

此处,个人感觉 没啥需要讲解的地方,所以直接贴出代码

    with open("./河工院通告.txt","w",encoding="utf-8") as file:
#循环
for title in title_list:
#写
file.write(title)
file.write("\n")
print("保存完毕!")

二. 从思想转换成程序

既然大体思路已经完成了,那么下面就还差完成代码了

  •  1. 思路及源码

那么下面就是代码的实现过程了:
1.设定所需爬取的URL
2. 添加请求头,伪装成浏览器。这位最基本的手段
3. 发送请求,获取数据
4. 通过正则提取所有内容
5. 保存内容到本地

#!/usr/bin/env python
# encoding: utf-8
'''
@author 李华鑫
@create 2020-10-06 10:04
Mycsdn:https://buwenbuhuo.blog.csdn.net/
@contact: 459804692@qq.com
@software: Pycharm
@file: 爬河工院通告.py
@Version:1.0
'''
# 导入包
import requests
import re

url = "https://zs.hait.edu.cn/list.jsp?urltype=tree.TreeTempUrl&wbtreeid=1261"
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36",
}
def hegong_Spider():
# 发送请求,获取响应
response = requests.get(url=url, headers=headers)
# 获取响应数据
content = response.content.decode("utf-8")
# 提取数据,使用正则表达式
title_list = re.findall(r'.*?',content,flags=re.DOTALL)

#打开文件写
with open("./河工院通告.txt","w",encoding="utf-8") as file:
#循环
for title in title_list:
#写
file.write(title)
file.write("\n")
print("保存完毕!")
if __name__ == '__main__':
hegong_Spider()

  •  2. 运行结果

833be8207e36f7f213608e19fa50b146.png

三. 代码升级

上述代码,我们只能爬取第一个的内容,这和我们所想的是有差别的,我们想的是要爬取所有通告,这个时候不用想我们就需要通过模拟翻页动作,进行全部获取。

  •  1. 分析

我们先来通过查看网址的变化以及查看能否看到网站的总页数,好以此来实现爬取全部标题的目的。

首先我们先来看下网址差异:

https://zs.hait.edu.cn/list.jsp?a5t=13&a5p=1&a5c=15&urltype=tree.TreeTempUrl&wbtreeid=1261
https://zs.hait.edu.cn/list.jsp?a5t=13&a5p=2&a5c=15&urltype=tree.TreeTempUrl&wbtreeid=1261
https://zs.hait.edu.cn/list.jsp?a5t=13&a5p=4&a5c=15&urltype=tree.TreeTempUrl&wbtreeid=1261

根据上述三个网址,我们不难发现网址唯一变化的地方就是8056304e5edb3a3128397e29e820b2ba.png
那么,我们就可以通过拼接网址的方式实现网页跳转。

下面我们再来查看网站总共有多少页码。8fa37a3ca34cc5886dc89d22b654ba09.png
我们可以看到总共有13页,下面就很简单了,我们先来看下拼接的url是否是我们所需要的adb6a859237cfdae49c15305434e4007.png

  •  2. 源码

?通过上图,看到url是我们所需要的,下面就可以完善一开始的代码了:

#!/usr/bin/env python
# encoding: utf-8
'''
@author 李华鑫
@create 2020-10-06 10:04
Mycsdn:https://buwenbuhuo.blog.csdn.net/
@contact: 459804692@qq.com
@software: Pycharm
@file: 爬河工院通告分页.py
@Version:1.0
'''
# 导入包
import random
import time
import requests
import re


headers = {
"user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36",
}
base_url = "https://zs.hait.edu.cn/list.jsp?a5t=13&a5p={}&a5c=15&urltype=tree.TreeTempUrl&wbtreeid=1261"

def hegong_Spider():
# 翻页
for i in range(1, 14):
print("第{}页爬取中...".format(i))
time.sleep(random.random())
url = base_url.format(i)
# 发送请求,获取响应
response = requests.get(url=url, headers=headers)
# 获取响应数据
content = response.content.decode("utf-8")
# 提取数据,使用正则表达式
title_list = re.findall(r'.*?', content, flags=re.DOTALL)
# title_list = content.xpath('//a[@]/@title').extract()
# 打开文件写
with open("./河工院通告.txt", "a", encoding="utf-8") as file:
# 循环
for title in title_list:
# 写
file.write(title)
file.write("\n")
print("保存完毕!")

if __name__ == '__main__':
hegong_Spider()
  •  3. 运行结果

c81f79598963a942d409b6ec0a3a3264.png

6281cd04be900a19202222c1ca61af60.gif 今日抽奖暗号: 133 ,公众号内回复暗号即可。 88fad917b6c43d25ead963de614e76d4.gif

f6abb89707073e5b09fcf175e63d4e61.gif

● 超完整的程序员技能图谱,看完一定不会后悔!

● 使用Flutter完成10个商业项目后的经验教训

● 程序员与架构师之间的差距很大吗?

c26c11bf20c41986286d6ceb2d212f72.png adc716d42e0710254cbb821411480ebb.png微信搜一搜 2452c088835e548d5b14b4253da4516f.png国民程序员 f0f62ec9539acc86c1f1bc2678b789e5.gif点分享 53101346653f32b035fb1a5d8c6df9d9.gif点点赞 ec3e9c5de898363b270f51e3fe10074e.gif点在看
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值