大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语—
不温不火
,本意是希望自己性情温和
。作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样处于起步阶段的萌新。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!暂时只在csdn这一个平台进行更新,博客主页:https://buwenbuhuo.blog.csdn.net/。
PS:由于现在越来越多的人未经本人同意直接爬取博主本人文章,博主在此特别声明:未经本人允许,禁止转载!!!
目录
推荐
♥各位如果想要交流的话,可以加下QQ交流群:974178910,里面有各种你想要的学习资料。♥
♥欢迎大家关注公众号【不温卜火】,关注公众号即可以提前阅读又可以获取各种干货哦,同时公众号每满1024及1024倍数则会抽奖赠送机械键盘一份+IT书籍1份哟~♥
博主前几天带来了一个通过查找百度接口实现翻译单词的小demo,本次将继续带来另一个使用正则的小demo。只需一行正则代码,即可爬取某高校官网通知公告。
一. 前期准备
说要爬取高校,那肯定要爬高校的,要不然就显的本博主言而无信!但是问题来了,要爬取哪个高校呢?不仅能够成功爬取到信息并且只需要一行正则表达式即可提取到相关信息。这可有点难为住博主了,正在这是 博主想到了自己学校,并且找到了自己学校就业处的网站,通过查看网站规则,发现正好符合规则。当然了博主本人的学校为双非院校,只是一所普通本二院校…Hahahaha… 话不多说,正片正式开始:
-
- 分析网页
首先给出我们要爬取的网址:https://zs.hait.edu.cn/list.jsp?urltype=tree.TreeTempUrl&wbtreeid=1261
我们打开网址以后,页面如上图所示,我们可以看到整个界面上,最多的就是一个又一个的通知公告,那么我们就知道我们需要爬取的内容。下面我们打开开发者选项
通过上图,我们可以看到每一个tr标签
对应一个通知公告,这个时候我们打开其中一个tr标签
进行查看
打开之后,我们可以看到我们所需要的所有信息都在a标签
内,找到了位置,下面我们就可以进行解析实现了。当然了,博主本人还是更喜欢使用xpath
进行解析的。
-
- 解析获取标题
下面先让大家看下xpath解析
我们所需要的标题的方法:
怎么样,是不是很简单。但是由于本篇博文是要用正则表达式,所以,博主还是使用正则表达式进行获取标题
上述的正则表达式(.*?)
代表获取选中部分的所有内容。
如果有小伙伴对正则表达式有不懂的,可以自行查看下博主给的链接https://www.runoob.com/regexp/regexp-syntax.html
当然了,写好了正则表达式当然需要先测试下能否成功获取到我们所需要的内容,下面给出测试结果:
🆗,我们可以看到获取到的结果是正确的,如果正则写的不对的话,需要多次查看调试,这不是什么难活,主要是需要有足够的耐心就够了。
-
- 保存到本地
此处,个人感觉 没啥需要讲解的地方,所以直接贴出代码
with open("./河工院通告.txt","w",encoding="utf-8") as file: #循环 for title in title_list: #写 file.write(title) file.write("\n") print("保存完毕!")
二. 从思想转换成程序
既然大体思路已经完成了,那么下面就还差完成代码了
-
- 思路及源码
那么下面就是代码的实现过程了:
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'<a class="c57797".*?title="(.*?)">.*?</a>',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()
-
- 运行结果
三. 代码升级
上述代码,我们只能爬取第一个的内容,这和我们所想的是有差别的,我们想的是要爬取所有通告,这个时候不用想我们就需要通过模拟翻页动作,进行全部获取。
-
- 分析
我们先来通过查看网址的变化以及查看能否看到网站的总页数,好以此来实现爬取全部标题的目的。
首先我们先来看下网址差异:
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
根据上述三个网址,我们不难发现网址唯一变化的地方就是
那么,我们就可以通过拼接网址的方式实现网页跳转。
下面我们再来查看网站总共有多少页码。
我们可以看到总共有13页,下面就很简单了,我们先来看下拼接的url是否是我们所需要的
-
- 源码
🆗通过上图,看到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'<a class="c57797".*?title="(.*?)">.*?</a>', content, flags=re.DOTALL) # title_list = content.xpath('//a[@class="c57797"]/@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()
-
- 运行结果
美好的日子总是短暂的,虽然还想继续与大家畅谈,但是本篇博文到此已经结束了,如果还嫌不够过瘾,不用担心,我们下篇见!
好书不厌读百回,熟读课思子自知。而我想要成为全场最靓的仔,就必须坚持通过学习来获取更多知识,用知识改变命运,用博客见证成长,用行动证明我在努力。
如果我的博客对你有帮助、如果你喜欢我的博客内容,请“点赞” “评论”“收藏”
一键三连哦!听说点赞的人运气不会太差,每一天都会元气满满呦!如果实在要白嫖的话,那祝你开心每一天,欢迎常来我博客看看。
码字不易,大家的支持就是我坚持下去的动力。点赞后不要忘了关注
我哦!
本文转自 https://buwenbuhuo.blog.csdn.net/article/details/109016583,如有侵权,请联系删除。