Datawhale 網絡爬蟲技術入門第2次筆記

正則表達式

正則表達式(Regular Expression),?種使?表達式的?式對字符串進?匹配的語法規則。

正則的語法:使?元字符進?排列組合來匹配字符串。

在線測試正則表達式:在線正則表達式測試OSCHINA.NET在線工具,ostools為開發設計人員提供在線工具,提供jsbin在線 CSS、JS 調試,在線 Java API文檔,在線 PHP API文檔,在線 Node.js API文檔,Less CSS編譯器,MarkDown編譯器等其他在線工具https://tool.oschina.net/regex/

元字符:具有固定含義的特殊符號。

.*??表示盡可能少的匹配,.*表示盡可能多的匹配。

Re模塊

案例1、手刃豆瓣TOP250電影信息

import requests
import re
import csv
import time
import random# 設置請求頭
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) ""AppleWebKit/537.36 (KHTML, like Gecko) ""Chrome/114.0.0.0 Safari/537.36","Referer": "https://movie.douban.com/top250"
}# 定義正則表達式
pattern = re.compile(r'<li>.*?<span class="title">(?P<name>.*?)</span>.*?'r'<br>\s*(?P<year>\d{4}).*?'r'<span class="rating_num"[^>]*>(?P<score>\d+\.\d+)</span>.*?'r'<span>(?P<num>[\d,]+)人評價</span>',re.S
)# 創建 CSV 文件并寫入表頭
with open("douban_top250.csv", mode="w", newline="", encoding="utf-8-sig") as f:csvwriter = csv.writer(f)csvwriter.writerow(["電影名稱", "上映年份", "評分", "評分人數"])# 抓取10頁(每頁25部電影)for start in range(0, 250, 25):url = f"https://movie.douban.com/top250?start={start}"print(f"正在抓取第 {start//25 + 1} 頁:{url}")try:resp = requests.get(url, headers=headers, timeout=10)resp.encoding = resp.apparent_encodinghtml = resp.text# 保存頁面用于調試(可選)with open(f"page_debug_{start}.html", "w", encoding="utf-8") as f_debug:f_debug.write(html)matches = list(pattern.finditer(html))print(f"? 第 {start//25 + 1} 頁成功,匹配到 {len(matches)} 條")for m in matches:name = m.group("name").strip()year = m.group("year").strip()score = m.group("score").strip()num = m.group("num").replace(",", "").strip()csvwriter.writerow([name, year, score, num])# 加延時防止被反爬time.sleep(random.uniform(1, 2))except Exception as e:print(f"? 抓取失敗:{e}")print("🎉 所有頁面抓取完畢,已保存到 douban_top250.csv")

結果:

案例2、Quotes to Scrape 爬此網站

import re
import requestsdef scrape_quotes():url = "http://quotes.toscrape.com/"response = requests.get(url)if response.status_code != 200:print("Failed to fetch page")returnhtml = response.text# 正則匹配所有名言區塊quotes_pattern = re.compile(r'<div class="quote".*?>(.*?)</div>', re.DOTALL)quotes = quotes_pattern.findall(html)results = []for quote in quotes:# 提取名言文本text_match = re.search(r'<span class="text".*?>(.*?)</span>', quote)text = text_match.group(1).strip() if text_match else "N/A"# 提取作者author_match = re.search(r'<small class="author".*?>(.*?)</small>', quote)author = author_match.group(1).strip() if author_match else "N/A"# 提取標簽tags = re.findall(r'<a class="tag".*?>(.*?)</a>', quote)results.append({"text": text,"author": author,"tags": tags})# 打印結果for i, result in enumerate(results, 1):print(f"Quote {i}:")print(f"  Text: {result['text']}")print(f"  Author: {result['author']}")print(f"  Tags: {', '.join(result['tags'])}\n")if __name__ == "__main__":scrape_quotes()

結果顯示:

?bs4模塊

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/85347.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/85347.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/85347.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

詳解Redis的集群模式(主從復制、哨兵與Cluster)

一、主從復制 (Master-Slave Replication) 1. 基本概念 主從復制是Redis最簡單的集群模式&#xff0c;由一個主節點(Master)和一個或多個從節點(Slave)組成。 2. 工作原理 數據同步&#xff1a;從節點啟動時會向主節點發送SYNC命令&#xff0c;主節點執行BGSAVE生成RDB文件并…

如何使用 Airtest 對 Flutter 和 Unity 應用進行UI自動化測試

使用 Airtest 進行 Flutter/Unity UI 自動化測試終極指南 一、 核心原理&#xff1a;為什么 Airtest 能行&#xff1f; 要理解如何用&#xff0c;先要明白其原理。Airtest 采取了“兩條腿走路”的策略&#xff0c;這正是它能通吃各種UI技術的關鍵。 第一條腿&#xff1a;基于…

河馬劇場多部自制劇霸榜,短劇精品化戰略持續推進

臨近暑期&#xff0c;短劇市場熱度逐漸攀升。近期&#xff0c;DataEye發布6月9日—6月15日微短劇熱力榜顯示河馬劇場以8部作品占據TOP30近三分之一席位&#xff0c;前三名中更是占據2個席位&#xff0c;以題材多元化、用戶覆蓋廣、數據爆發力強的特點引領行業風向。其中&#x…

冪級數 (0,R); R ;(R,+oo)

很好&#xff0c;我們現在來回答你問的這個問題&#xff1a; &#x1f7e0; 冪級數在收斂半徑 R R R 以外會發生什么&#xff1f; 我們考慮一個一般形式的冪級數&#xff1a; ∑ n 0 ∞ a n ( x ? x 0 ) n \sum_{n0}^{\infty} a_n (x - x_0)^n n0∑∞?an?(x?x0?)n 它的…

C#學習13——正則表達式

一、正則表達式 是一種匹配輸入文本的模式&#xff0c;是由特殊字符組成&#xff0c;用于匹配字符串中的字符組合。 二、正則表達式有哪些&#xff1f; 1.Regex 類&#xff08;引入System.Text.RegularExpressions;&#xff09; Regex 類用于表示一個正則表達式。 1&#…

【Redis】持久化機制:RDB / AOF 的應用與場景

文章目錄 Redis 持久化一、RDB1.1 說明1.2 觸發機制手動觸發自動觸發 1.3 流程說明1.4 文件處理1.5 優缺點 & 適用場景 二、AOF2.1 說明2.2 使用 AOF2.3 命令寫入2.4 文件同步2.5 重寫機制2.6 啟動時數據恢復2.7 優缺點 & 適用場景 三、不使用 AOF / RDB 的情況3.1 場景…

Python 企業級開發與DevOps實踐

https://www.python.org/static/community_logos/python-logo-master-v3-TM.png 大型項目結構與設計模式 項目結構規范 text 復制 下載 enterprise_app/ ├── docs/ # 項目文檔 ├── tests/ # 測試代碼 │ ├── unit/ …

E結構體基礎.go

前言&#xff1a;結構體是一種用戶自定義的數據類型&#xff0c;它可以將多個不同類型的數據整合在一起&#xff0c;形成一個有機的整體。這就好比在現實生活中&#xff0c;我們有各種各樣的物品&#xff0c;它們各自有不同的屬性和用途&#xff0c;而結構體就像是一個收納箱&a…

Spring @Autowired 依賴注入全解析

Autowired 是 Spring 框架中實現依賴注入的核心注解&#xff0c;其自動裝配過程可分為以下步驟&#xff0c;結合了類型匹配、名稱解析和容器協作機制&#xff1a; 1. 組件掃描與 Bean 定義注冊 掃描階段&#xff1a;Spring 容器啟動時&#xff0c;通過 ComponentScan 或 XML 配…

將git的普通目錄用idea初始化為maven項目

在 IntelliJ IDEA 中將一個已存在的 Git 目錄初始化為 Maven 項目&#xff0c;可以通過以下步驟完成。這些步驟假設你已經有一個包含代碼的 Git 倉庫&#xff0c;并希望將其轉換為 Maven 項目結構&#xff0c;以便更好地管理依賴和構建。 步驟 1&#xff1a;打開或導入 Git 倉庫…

Vue 中 key 屬性的深入解析:改變 key 導致組件銷毀與重建

一、key 屬性的核心作用 在 Vue 中,key是一個特殊的屬性,主要用于協助 Vue 的虛擬 DOM(Virtual DOM)算法高效地更新實際 DOM。它的核心作用可以概括為: 唯一標識節點:為每個節點提供一個唯一的身份標識優化 Diff 算法:幫助 Vue 準確判斷兩個節點是否為同一節點(如for循…

【音視頻】PJSIP庫——示例簡介、C++類說明

1、簡介 pjsip庫的源碼中有很多示例,是入門pjsip的第一手資料,下面將各個示例所演示的功能列舉出來,以便下一步學習; 最后總結下C++接口主要類及成員函數說明。 2、示例介紹 2.1 音視頻處理 aectest 音頻回聲消除測試工具,用于演示音頻處理模塊中的回聲消除(AEC)功能…

網站用CDN可以防DDoS和CC攻擊嗎?

現在市面上常見有兩種CDN&#xff0c;加速CDN與高防CDN&#xff0c;這兩種的區別還是很大的。 加速CDN&#xff1a; 加速CDN基本上都是共享、無防節點&#xff0c;主要做的是加速&#xff0c;所以價格也會相對較低&#xff0c;大陸地區的CDN都需要備案域名接入使用。 高防CD…

【圖片識別改名】批量識別圖片中的文字對圖片進行改名,識別文字對圖片重新命名的操作步驟和注意事項

一、應用場景 快遞單號識別與管理&#xff1a;在快遞業務中&#xff0c;每天會產生大量的快遞面單圖片。通過咕嘎OCR批量識別面單上的快遞單號等關鍵信息&#xff0c;并以此對圖片進行重命名&#xff0c;方便工作人員快速查詢和管理快遞包裹的物流信息&#xff0c;提高快遞處理…

先理解軟件工程,再談AI輔助研發

摘要&#xff1a; 近期行業內對“AI賦能軟件工程”的討論&#xff0c;大多聚焦于代碼生成等局部提效&#xff0c;這是一種危險的短視。本文旨在糾正將“軟件開發”等同于“編碼”的普遍誤解&#xff0c;深入探討軟件工程的系統性本質。我們將論證&#xff0c;若缺乏堅實的工程體…

Android軟件適配遙控器需求-案例經驗分享

不分大屏產品需要有遙控器功能&#xff0c;這里分享部分實戰經驗 文章目錄 前言一、案例部分效果圖二、項目基礎架構三、焦點基礎知識適配遙控器基礎-焦點問題焦點管理明確焦點狀態布局實現硬編碼實現引入第三方自定義組件實現 焦點順序作用 初始焦點 requestFocus 按鍵處理獲取…

《HTTP權威指南》 第3章 HTTP報文

報文是如何流動的 HTTP報文是在HTTP程序之間發送的數據塊。數據塊以一些文本形式的元信息開頭。 報文方向有&#xff1a;流入、流出、上游、下游。 流入和流出描述事務處理的方向&#xff0c;流入和流出是基于服務器的描述。 流入&#xff1a;客戶端發往服務器的請求報文 流…

Kafka 集群架構與高可用方案設計(二)

Kafka 集群架構與高可用方案的優化策略 合理配置參數 在 Kafka 集群的配置中&#xff0c;參數的合理設置對于系統的高可用性和性能表現起著關鍵作用。例如&#xff0c;min.insync.replicas參數定義了 ISR&#xff08;In-Sync Replicas&#xff0c;同步副本&#xff09;集合中…

47-Oracle ASH報告解讀

上一期生成了ASH報告后&#xff0c;就需要解讀報告關鍵信息。ASH的使用可以快速定位瞬時性能問題。生產環境的場景時間緊、任務重&#xff0c;但是必須要結合具體業務分析&#xff0c;同時借助其他工具做報告做趨勢分析。 一、ASH 技術原理? ?1. 核心機制? ?采樣原理?&a…

“本地化思維+模塊化體驗”:一款輕量數據中心監控系統的真實測評

“本地化思維模塊化體驗”&#xff1a;一款輕量數據中心監控系統的真實測評 在數據中心運維逐步精細化的今天&#xff0c;一款真正貼合本地用戶習慣、設計有溫度的系統并不多見。近期體驗了一款功能全面、邏輯清晰的監控平臺&#xff0c;給人留下了深刻印象。并不是廣。今天就從…