??大家好,我是不溫卜火,是一名計算機學院大資料專業大三的學生,昵稱來源于成語—
不溫不火,本意是希望自己性情溫和,作為一名互聯網行業的小白,博主寫博客一方面是為了記錄自己的學習程序,另一方面是總結自己所犯的錯誤希望能夠幫助到很多和自己一樣處于起步階段的萌新,但由于水平有限,博客中難免會有一些錯誤出現,有紕漏之處懇請各位大佬不吝賜教!暫時只在csdn這一個平臺進行更新,博客主頁:https://buwenbuhuo.blog.csdn.net/,
PS:由于現在越來越多的人未經本人同意直接爬取博主本人文章,博主在此特別宣告:未經本人允許,禁止轉載!!!
目錄
- 一. 前期準備
- 二. 從思想轉換成程式
- 三. 代碼升級

博主前幾天帶來了一個通過查找百度介面實作翻譯單詞的小demo,本次將繼續帶來另一個使用正則的小demo,只需一行正則代碼,即可爬取某高校官網通知公告,
一. 前期準備
說要爬取高校,那肯定要爬高校的,要不然就顯的本博主言而無信!但是問題來了,要爬取哪個高校呢?不僅能夠成功爬取到資訊并且只需要一行正則運算式即可提取到相關資訊,這可有點難為住博主了,正在這是 博主想到了自己學校,并且找到了自己學校就業處的網站,通過查看網站規則,發現正好符合規則,當然了博主本人的學校為雙非院校,只是一所普通本二院校…Hahahaha… 話不多說,正片正式開始:
- 1. 分析網頁
首先給出我們要爬取的網址:https://zs.hait.edu.cn/list.jsp?urltype=tree.TreeTempUrl&wbtreeid=1261

我們打開網址以后,頁面如上圖所示,我們可以看到整個界面上,最多的就是一個又一個的通知公告,那么我們就知道我們需要爬取的內容,下面我們打開開發者選項

通過上圖,我們可以看到每一個tr標簽對應一個通知公告,這個時候我們打開其中一個tr標簽進行查看

打開之后,我們可以看到我們所需要的所有資訊都在a標簽內,找到了位置,下面我們就可以進行決議實作了,當然了,博主本人還是更喜歡使用xpath進行決議的,
- 2. 決議獲取標題
下面先讓大家看下xpath決議我們所需要的標題的方法:

怎么樣,是不是很簡單,但是由于本篇博文是要用正則運算式,所以,博主還是使用正則運算式進行獲取標題

上述的正則運算式(.*?)代表獲取選中部分的所有內容,
如果有小伙伴對正則運算式有不懂的,可以自行查看下博主給的鏈接https://www.runoob.com/regexp/regexp-syntax.html
當然了,寫好了正則運算式當然需要先測驗下能否成功獲取到我們所需要的內容,下面給出測驗結果:

🆗,我們可以看到獲取到的結果是正確的,如果正則寫的不對的話,需要多次查看除錯,這不是什么難活,主要是需要有足夠的耐心就夠了,
- 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'<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()
- 2. 運行結果

三. 代碼升級
上述代碼,我們只能爬取第一個的內容,這和我們所想的是有差別的,我們想的是要爬取所有通告,這個時候不用想我們就需要通過模擬翻頁動作,進行全部獲取,
- 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
根據上述三個網址,我們不難發現網址唯一變化的地方就是

那么,我們就可以通過拼接網址的方式實作網頁跳轉,
下面我們再來查看網站總共有多少頁碼,

我們可以看到總共有13頁,下面就很簡單了,我們先來看下拼接的url是否是我們所需要的

- 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'<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()
- 3. 運行結果

美好的日子總是短暫的,雖然還想繼續與大家暢談,但是本篇博文到此已經結束了,如果還嫌不夠過癮,不用擔心,我們下篇見!

??好書不厭讀百回,熟讀課思子自知,而我想要成為全場最靚的仔,就必須堅持通過學習來獲取更多知識,用知識改變命運,用博客見證成長,用行動證明我在努力,
??如果我的博客對你有幫助、如果你喜歡我的博客內容,請“點贊” “評論”“收藏”一鍵三連哦!聽說點贊的人運氣不會太差,每一天都會元氣滿滿呦!如果實在要白嫖的話,那祝你開心每一天,歡迎常來我博客看看,
??碼字不易,大家的支持就是我堅持下去的動力,點贊后不要忘了關注我哦!


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/172399.html
標籤:其他
