网络爬虫入门
網絡爬蟲入門
- 一、初識網絡爬蟲
- (一)網絡爬蟲定義
- (二)網絡爬蟲原理
- (三)使用范圍
- (四)爬蟲工作的過程
- (五)爬蟲分類
- 1.通用網絡爬蟲
- 2.增量爬蟲
- 3.垂直爬蟲
- 4.Deep Web爬蟲
- 二、爬取南陽理工學院ACM題目網站 http://www.51mxd.cn/ 練習題目數據
- (一)新建.py文件
- (二)爬取結果
- (三)代碼分析
- 三、爬取重慶交通大學新聞網站中近幾年所有的信息通知(http://news.cqjtu.edu.cn/xxtz.htm) 的發布日期和標題全部爬取
- (一)確定爬取信息的位置
- (二)代碼實現
- (三)運行結果
- 四、總結
- 五、參考資料
一、初識網絡爬蟲
(一)網絡爬蟲定義
- 網絡爬蟲英文名叫Web Crawler戒Web
Spider。 - 它是一種自動瀏覽網頁并采集所需要信
息癿程序。
互聯網示意圖
- 每個節點都是一個網頁
- 每條邊都是一個超鏈接
- 網絡爬蟲就是從這樣一個網絡圖中抓取感興趣的內容
(二)網絡爬蟲原理
- 爬蟲從初始網頁的URL開始, 獲取初始網頁上的URL;
- 在抓取網頁的過程中, 丌斷仍當前頁面上抽取新的URL放入隊列;
- 直到滿足系統給定的停止條件
(三)使用范圍
- 作為搜索引擎的網頁搜集器,抓取整個互聯網,如谷歌,百度等;
- 作為垂直搜索引擎,抓取特定主題信息,如視頻網站,招聘網站等。
- 作為測試網站前端的檢測工具,用來評價網站前端代碼的健壯性
(四)爬蟲工作的過程
- URL管理模塊:發起請求。一般是通過HTTP庫,對目標站點進行請求。等同于自己打開瀏覽器,輸入網址。
- 下載模塊:獲取響應內容(response)。如果請求的內容存在于服務器上,那么服務器會返回請求的內容,一般為:HTML,二進制文件(視頻,音頻),文檔,Json字符串等。
- 解析模塊:解析內容。對于用戶而言,就是尋找自己需要的信息。對于Python爬蟲而言,就是利用正則表達式或者其他庫提取目標信息。
- 存儲模塊:保存數據。解析得到的數據可以多種形式,如文本,音頻,視頻保存在本地。
(五)爬蟲分類
1.通用網絡爬蟲
- 通用網絡爬蟲又稱全網爬蟲(Scalable Web Crawler),
爬行對象從·一些種子 URL 擴充到整個 Web,主要為門戶
站點搜索引擎和大型 Web 服務提供商采集數據。 - 通用網絡爬蟲根據預先設定的一個或若干初始種
子URL開始,以此獲得初始網頁上的URL列表,在
爬行過程中不斷從URL隊列中獲一個的URL,進而
訪問并下載該頁面。
2.增量爬蟲
- 增量式網絡爬蟲(Incremental Web Crawler)是 指 對 已 下 載 網 頁 采
取增量式更新和只爬行新產生的或者已經發生發化網頁的爬蟲,它能夠在一
定程度上保證所爬行的頁面是盡可能新的頁面。 - 增量式爬蟲有兩個目標:保持本地頁面集中存儲的頁面為最新頁面和提高
本地頁面集中頁面的質量。 - 通用的商業搜索引擎如谷歌,百度等,本質上都屬亍增量爬蟲。
3.垂直爬蟲
- 垂直爬蟲,又稱為聚焦網絡爬蟲(Focused Crawler),或主題網絡爬蟲(Topical Crawler) -
- 是指選擇性地爬行那些不預先定義好癿主題相關頁
面的·網絡爬蟲。如Email地址、電子書、商品價格等。 - 爬行策略實現的關鍵是評價頁面內容和鏈接的重要
性,不同的方法計算出的重要性不同,由此導致鏈
接的訪問順序也丌同
4.Deep Web爬蟲
- Deep Web 是那些大部分內容不能通過靜態鏈接獲取的、隱藏在搜索表單后的,叧有用戶提交一些關鍵詞才能獲得的 Web 頁面。
- Deep Web 爬蟲爬行過程中最重要部分就是表單填寫,包含兩種類型:
? 1) 基亍領域知識的表單填寫
? 2) 基亍網頁結構分析的表單填寫
二、爬取南陽理工學院ACM題目網站 http://www.51mxd.cn/ 練習題目數據
(一)新建.py文件
import requests# 導入網頁請求庫 from bs4 import BeautifulSoup# 導入網頁解析庫 import csv from tqdm import tqdm# 模擬瀏覽器訪問 Headers = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400'# 表頭 csvHeaders = ['題號', '難度', '標題', '通過率', '通過數/總提交數']# 題目數據 subjects = []# 爬取題目 print('題目信息爬取中:\n') for pages in tqdm(range(1, 11 + 1)):# 傳入URLr = requests.get(f'http://www.51mxd.cn/problemset.php-page={pages}.htm', Headers)r.raise_for_status()r.encoding = 'utf-8'# 解析URLsoup = BeautifulSoup(r.text, 'html5lib')#查找爬取與td相關所有內容td = soup.find_all('td')subject = []for t in td:if t.string is not None:subject.append(t.string)if len(subject) == 5:subjects.append(subject)subject = []# 存放題目 with open('NYOJ_Subjects.csv', 'w', newline='') as file:fileWriter = csv.writer(file)fileWriter.writerow(csvHeaders)fileWriter.writerows(subjects)print('\n題目信息爬取完成!!!')(二)爬取結果
點擊運行后生成NYOJ_Subjects.csv文件,打開該文件
(三)代碼分析
1.運行環境Python3.8
2.本次調用了 requests網頁請求庫和Beautiful Soup網頁解析庫
import requests# 導入網頁請求庫 from bs4 import BeautifulSoup# 導入網頁解析庫
3.定義訪問瀏覽器所需的請求頭和寫入csv文件需要的表頭以及存放題目數據的列表
4.根據表頭csvHeaders中內容爬取信息,并在進度條中顯示進度
# 爬取題目 print('題目信息爬取中:\n') for pages in tqdm(range(1, 11 + 1)):#一頁一頁地爬取信息# 傳入URLr = requests.get(f'http://www.51mxd.cn/problemset.php-page={pages}.htm', Headers)r.raise_for_status()r.encoding = 'utf-8'#輸出文檔為utf-8編碼# 解析URLsoup = BeautifulSoup(r.text, 'html5lib')#查找爬取與csvHeaders表頭中相關所有內容td = soup.find_all('td')subject = []#新定義一個subject用來存放當前頁面爬取的滿足特征的信息for t in td:if t.string is not None:subject.append(t.string)if len(subject) == 5:#通過長度判斷subject內容是否爬取到上面5項subjects.append(subject)#把subject存放進上面的subjects中subject = []#subject置空5.把爬取內容存放文件NYOJ_Subjects.csv中
# 存放題目 with open('NYOJ_Subjects.csv', 'w', newline='') as file:fileWriter = csv.writer(file)fileWriter.writerow(csvHeaders)fileWriter.writerows(subjects)print('\n題目信息爬取完成!!!')三、爬取重慶交通大學新聞網站中近幾年所有的信息通知(http://news.cqjtu.edu.cn/xxtz.htm) 的發布日期和標題全部爬取
(一)確定爬取信息的位置
1.進入網站http://news.cqjtu.edu.cn/xxtz.htm
2.鼠標空白處點擊后選擇檢查N
3.可以觀察到需要爬取時間和標題所在位置
(二)代碼實現
# -*- coding: utf-8 -*- """ Created on Wed Nov 17 14:39:03 2021@author: 86199 """ import requests from bs4 import BeautifulSoup import csv from tqdm import tqdm import urllib.request, urllib.error # 制定URL 獲取網頁數據# 所有新聞 subjects = []# 模擬瀏覽器訪問 Headers = { # 模擬瀏覽器頭部信息"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36 Edg/95.0.1020.53" }# 表頭 csvHeaders = ['時間', '標題']print('信息爬取中:\n') for pages in tqdm(range(1, 65 + 1)):# 發出請求request = urllib.request.Request(f'http://news.cqjtu.edu.cn/xxtz/{pages}.htm', headers=Headers)html = ""# 如果請求成功則獲取網頁內容try:response = urllib.request.urlopen(request)html = response.read().decode("utf-8")except urllib.error.URLError as e:if hasattr(e, "code"):print(e.code)if hasattr(e, "reason"):print(e.reason)# 解析網頁soup = BeautifulSoup(html, 'html5lib')# 存放一條新聞subject = []# 查找所有li標簽li = soup.find_all('li')for l in li:# 查找滿足條件的div標簽if l.find_all('div',class_="time") is not None and l.find_all('div',class_="right-title") is not None:# 時間for time in l.find_all('div',class_="time"):subject.append(time.string)# 標題for title in l.find_all('div',class_="right-title"):for t in title.find_all('a',target="_blank"):subject.append(t.string)if subject:print(subject)subjects.append(subject)subject = []# 保存數據 with open('test.csv', 'w', newline='',encoding='utf-8') as file:fileWriter = csv.writer(file)fileWriter.writerow(csvHeaders)fileWriter.writerows(subjects)print('\n信息爬取完成!!!')(三)運行結果
打開生成的test.csv文件如下
四、總結
網絡爬蟲需要一定的Web基礎,需要分析所要獲取的內容信息的存放位置后設置條件進行爬蟲。Python中通過調用庫來進行爬蟲獲取信息比較簡單方便。
五、參考資料
基礎篇-爬蟲基本原理
爬蟲-Python編程入門
基于python爬取重慶交通大學新聞網內容
總結
- 上一篇: [Andriod官方训练教程]保存数据之
- 下一篇: Nginx(1)— Nginx工作原理