本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理,
作者 不溫卜火
以下文章來源于
https://blog.csdn.net/qq_16146103/article/details/109016583
一. 前期準備
說要爬取高校,那肯定要爬高校的,要不然就顯的本博主言而無信!但是問題來了,要爬取哪個高校呢?不僅能夠成功爬取到資訊并且只需要一行正則運算式即可提取到相關資訊,這可有點難為住博主了,正在這是 博主想到了自己學校,并且找到了自己學校就業處的網站,通過查看網站規則,發現正好符合規則,當然了博主本人的學校為雙非院校,只是一所普通本二院校…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. 保存內容到本地
# 匯入包
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 .*?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是我們所需要的,下面就可以完善一開始的代碼了:
# 匯入包
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 .*?title="(.*?)">.*?</a>', 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. 運行結果
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/171015.html
標籤:Python
