<!DOCTYPE html>
<html lang="zh-TW"><head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="author" content="林知慧" />
<meta name="title" content="Python爬蟲與正則表達式,如何讓你的程式更有趣?" />
<meta name="description" content="這個網站是專為Python學習者打造的平台。我致力於分享從入門到進階的Python教學,提供實用的程式設計技巧及數據分析案例。希望透過這裡的資源,讓每位學習者都能輕鬆掌握Python技能。" />
<meta name="keywords" content="Python基礎教程, Python爬蟲教學, Python安裝指南, Python自動化腳本, Python資料分析實例, Python程式設計技巧, Python進階應用, Python學習資源" />
<meta property="og:site_name" content="Python全攻略:基礎、實例與數據分析">
<meta property="og:type" content="article">
<meta property="og:description" content="這個網站是專為Python學習者打造的平台。我致力於分享從入門到進階的Python教學,提供實用的程式設計技巧及數據分析案例。希望透過這裡的資源,讓每位學習者都能輕鬆掌握Python技能。" />
<meta property="og:keywords" content="Python基礎教程, Python爬蟲教學, Python安裝指南, Python自動化腳本, Python資料分析實例, Python程式設計技巧, Python進階應用, Python學習資源">
<meta property="twitter:image" content="" />
<meta property="twitter:card" content="summary" />
<link rel="icon" type="image/png" href="https://www.recorderpress.com/favicon/%e6%9e%97%e7%9f%a5%e6%85%a7.ico" />
<link rel="shortcut icon" type="image/png" href="https://www.recorderpress.com/favicon/%e6%9e%97%e7%9f%a5%e6%85%a7.ico" />
<title>Python爬蟲與正則表達式,如何讓你的程式更有趣?|Python全攻略:基礎、實例與數據分析</title>
<link rel="canonical" href="https://www.recorderpress.com/python-crawlers-and-regex/">
<link rel="stylesheet" href="https://www.recorderpress.com/css/iDisqus.min.css"/>
<link rel="stylesheet" href="https://www.recorderpress.com/css/bootstrap.min.css">
<link rel="stylesheet" href="https://www.recorderpress.com/css/hugo-theme-cleanwhite.min.css">
<link rel="stylesheet" href="https://www.recorderpress.com/css/zanshang.css">
<link rel="stylesheet" href="https://www.recorderpress.com/css/font-awesome.all.min.css">
<script src="https://www.recorderpress.com/js/jquery.min.js"></script>
<script src="https://www.recorderpress.com/js/bootstrap.min.js"></script>
<script src="https://www.recorderpress.com/js/hux-blog.min.js"></script>
<script src="https://www.recorderpress.com/js/lazysizes.min.js"></script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"publisher": {
"@type": "Organization",
"name": "林知慧",
"logo": {
"@type": "ImageObject",
"url": "https:\/\/www.recorderpress.com\/",
"width": "600",
"height": "60"
}
},
"inLanguage": "zh-TW",
"@type": "BlogPosting",
"headline": "Python爬蟲與正則表達式,如何讓你的程式更有趣?",
"name": "Python爬蟲與正則表達式,如何讓你的程式更有趣?",
"description": "\u003cp\u003e在這個數位時代,資料就是力量,而掌握資料的能力成為不可或缺的技能。Python爬蟲這項技術,讓我們能夠從網路上獲取各種有用的資訊;而正則表達式(Regular Expression,簡稱Regex或RE)則是一個強大的輔助工具,讓資料的處理如虎添翼。本文將深入探討如何利用這兩者,讓你的程式寫作更具挑戰性與趣味性。\u003c\/p\u003e",
"url": "https:\/\/www.recorderpress.com\/python-crawlers-and-regex\/",
"datePublished": "2024-11-28T06:29:09\u002b08:00",
"dateModified": "2024-11-28T06:29:09\u002b08:00",
"image": ,
"author": {
"@type": "Person",
"name": "林知慧"
},
"keywords": [
]
}
</script>
</head>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-76PZP8764S"></script>
<script>
var doNotTrack = false;
if ( false ) {
var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
var doNotTrack = (dnt == "1" || dnt == "yes");
}
if (!doNotTrack) {
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-76PZP8764S');
}
</script><nav class="navbar navbar-default navbar-custom navbar-fixed-top"><div class="container-fluid">
<div class="navbar-header page-scroll">
<button type="button" class="navbar-toggle">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="https://www.recorderpress.com/">Python全攻略:基礎、實例與數據分析</a>
</div>
<div id="huxblog_navbar">
<div class="navbar-collapse">
<ul class="nav navbar-nav navbar-right">
<li> <a href="https://www.recorderpress.com/">首頁</a></li><li>
<a href="https://www.recorderpress.com/categories/python%E5%85%A5%E9%96%80/">python入門</a>
</li><li>
<a href="https://www.recorderpress.com/categories/python%E5%AE%89%E8%A3%9D%E6%8C%87%E5%8D%97/">python安裝指南</a>
</li><li>
<a href="https://www.recorderpress.com/categories/python%E7%88%AC%E8%9F%B2%E6%95%99%E5%AD%B8/">python爬蟲教學</a>
</li>-->
-->
<li><a href="https://www.recorderpress.com/about">關於我們</a></li>
<li><a href="https://www.recorderpress.com/contact">聯絡我們</a></li>
<li><a href="https://www.recorderpress.com/privacy-policy">隱私權政策</a></li>
<li><a href="https://www.recorderpress.com/disclaimer">免責聲明</a></li>
<li>
<a href="https://www.recorderpress.com/search"><i class="fa fa-search"></i></a>
</li>
</ul>
</div>
</div>
</div>
</nav>
<script>
var $body = document.body;
var $toggle = document.querySelector('.navbar-toggle');
var $navbar = document.querySelector('#huxblog_navbar');
var $collapse = document.querySelector('.navbar-collapse');
$toggle.addEventListener('click', handleMagic)
function handleMagic(e){
if ($navbar.className.indexOf('in') > 0) {
$navbar.className = " ";
setTimeout(function(){
if($navbar.className.indexOf('in') < 0) {
$collapse.style.height = "0px"
}
},400)
}else{
$collapse.style.height = "auto"
$navbar.className += " in";
}
}
</script>
<style type="text/css">
header.intro-header {
background-image: url('/img/header-image.jpg')
}
</style><header class="intro-header" ><div class="container">
<div class="row">
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
<div class="post-heading">
<div class="tags"></div>
<h1>Python爬蟲與正則表達式,如何讓你的程式更有趣?</h1>
<h2 class="subheading"></h2>
<span class="meta">Posted by林知慧onThursday, November 28, 2024</span>
</div>
</div>
</div>
</div>
</header>
<article>
<div class="container">
<div class="row">
<div class="
col-lg-8 col-lg-offset-2
col-md-10 col-md-offset-1
post-container">
<div style="text-align: center;">
<img src="https://www.recorderpress.com/images_pics/python-crawlers-and-regex.png" alt="Python爬蟲與正則表達式,如何讓你的程式更有趣?" style="max-width: 100%; height: auto;">
</div><p>在這個數位時代,資料就是力量,而掌握資料的能力成為不可或缺的技能。Python爬蟲這項技術,讓我們能夠從網路上獲取各種有用的資訊;而正則表達式(Regular Expression,簡稱Regex或RE)則是一個強大的輔助工具,讓資料的處理如虎添翼。本文將深入探討如何利用這兩者,讓你的程式寫作更具挑戰性與趣味性。</p>
<h2 id="正則表達式的魅力從匹配到替換">正則表達式的魅力:從匹配到替換</h2>
<p>在開始之前,我們必須了解正則表達式的基本功能。簡單來說,正則表達式就是一種使用特定語法的字串,用來匹配符合某種模式的文本。以下是正則表達式的三大主要功能:</p>
<ol>
<li>
<p><strong>匹配(Match):</strong> <code>match</code>是從字串開頭開始匹配,如果匹配失敗就回傳<code>None</code>。這就像是在超市門口攔下第一個顧客,看看他是否帶著你需要的商品。</p>
</li>
<li>
<p><strong>掃描(Search):</strong> <code>search</code>則是掃描整個字串,返回第一個成功匹配的結果,若無則返回<code>None</code>。這就像是在超市裡巡視每個貨架,直到找到所需物品為止。</p>
</li>
<li>
<p><strong>替換(Sub):</strong> <code>sub</code>用於替換被匹配的部分,就像是把已過期的牛奶從冰箱中換成新鮮的。</p>
</li>
</ol>
<h2 id="正則表達式的語法讓符號說話">正則表達式的語法:讓符號說話!</h2>
<p>正則表達式擁有自己獨特的語法,就像是一門神秘的語言。以下是幾個常用的正則表達式語法:</p>
<ul>
<li><strong><code>.</code>(點號):</strong> 匹配任意單個字符,除了換行符。</li>
<li><strong><code>*</code>(星號):</strong> 匹配前一個字符零次或多次。</li>
<li><strong><code>+</code>(加號):</strong> 匹配前一個字符一次或多次。</li>
<li><strong><code>[]</code>(中括號):</strong> 匹配括號內的任意一個字符。</li>
<li><strong><code>^</code>(插入符):</strong> 表示行首匹配。</li>
<li><strong><code>$</code>(美元符):</strong> 表示行尾匹配。</li>
</ul>
<p>這些符號的運用,就像是為程式設計師量身訂製的魔法咒語,讓複雜的字串處理變得簡單而優雅。</p>
<h2 id="正則表達式在python爬蟲中的應用">正則表達式在Python爬蟲中的應用</h2>
<p>Python爬蟲是一種自動化的技術,主要用於從網頁抓取資料。正則表達式在其中扮演了重要角色,特別是在資料清理與格式化的過程中。以下是一個簡單的例子:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#ff79c6">import</span> re
</span></span><span style="display:flex;"><span><span style="color:#ff79c6">import</span> requests
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>url <span style="color:#ff79c6">=</span> <span style="color:#f1fa8c">"http://example.com"</span>
</span></span><span style="display:flex;"><span>response <span style="color:#ff79c6">=</span> requests<span style="color:#ff79c6">.</span>get(url)
</span></span><span style="display:flex;"><span>html_content <span style="color:#ff79c6">=</span> response<span style="color:#ff79c6">.</span>text
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#6272a4"># 使用正則表達式提取所有的電子郵件地址</span>
</span></span><span style="display:flex;"><span>emails <span style="color:#ff79c6">=</span> re<span style="color:#ff79c6">.</span>findall(<span style="color:#f1fa8c">r</span><span style="color:#f1fa8c">"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"</span>, html_content)
</span></span><span style="display:flex;"><span><span style="color:#8be9fd;font-style:italic">print</span>(emails)
</span></span></code></pre></div><p>在這段程式碼中,我們使用了<code>re.findall</code>函數來提取網頁中的電子郵件地址。這是一個強大而簡單的正則表達式應用示例,顯示了如何在大量資料中快速找到所需資訊。</p>
<h2 id="正則表達式的實用範例">正則表達式的實用範例</h2>
<p>以下是一個正則表達式的實用範例表格,幫助理解不同場景中的應用:</p>
<table>
<thead>
<tr>
<th>功能</th>
<th>正則表達式示例</th>
<th>說明</th>
</tr>
</thead>
<tbody>
<tr>
<td>匹配郵箱地址</td>
<td><code>[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}</code></td>
<td>提取電子郵件地址</td>
</tr>
<tr>
<td>匹配電話號碼</td>
<td><code>\(?\d{3}\)?-?\s*\d{3}-\d{4}</code></td>
<td>提取美國電話號碼</td>
</tr>
<tr>
<td>匹配網址</td>
<td><code>https?://[^\s/$.?#].[^\s]*</code></td>
<td>提取HTTP或HTTPS的網址</td>
</tr>
<tr>
<td>匹配日期</td>
<td><code>\b\d{4}-\d{2}-\d{2}\b</code></td>
<td>提取格式為YYYY-MM-DD的日期</td>
</tr>
<tr>
<td>替換空白行</td>
<td><code>^\s*$</code></td>
<td>刪除空白行</td>
</tr>
</tbody>
</table>
<p>這些範例展示了正則表達式的多樣性,讓我們可以針對不同格式的資料進行精確的處理。</p>
<h2 id="常見問題解答">常見問題解答</h2>
<h3 id="如何學習正則表達式">如何學習正則表達式?</h3>
<p>學習正則表達式最好的方式就是不斷練習!可以先從簡單的模式開始,逐步增加複雜性。此外,網路上有許多免費的資源和工具,如<a href="https://regex101.com/">Regex101</a>可以幫助你測試和理解正則表達式。</p>
<h3 id="正則表達式對於初學者來說會很困難嗎">正則表達式對於初學者來說會很困難嗎?</h3>
<p>正則表達式一開始可能會有點難上手,因為它的語法比較特別。然而,一旦掌握了基本語法,將會發現它是非常強大和實用的工具。</p>
<h3 id="正則表達式可以在所有程式語言中使用嗎">正則表達式可以在所有程式語言中使用嗎?</h3>
<p>正則表達式是跨平台的,幾乎所有的程式語言都支持正則表達式,包括Python、Java、JavaScript等。每個語言可能有些許的語法差異,但基本概念是一致的。</p>
<h3 id="使用正則表達式時應該注意什麼">使用正則表達式時應該注意什麼?</h3>
<p>正則表達式非常強大,但過於複雜的正則表達式可能會影響程式的效能。因此,在設計正則表達式時應該考慮效率問題,並避免過度使用。</p>
<h3 id="如何在python中使用正則表達式">如何在Python中使用正則表達式?</h3>
<p>Python提供了內建的<code>re</code>模組來支持正則表達式的使用。你可以使用<code>re.match()</code>、<code>re.search()</code>、<code>re.findall()</code>等函數來進行匹配操作。</p>
<h3 id="正則表達式能否替代所有的字串處理">正則表達式能否替代所有的字串處理?</h3>
<p>雖然正則表達式非常強大,但並不是適合所有的字串處理工作。有些情況下,使用簡單的字串方法(如<code>split()</code>或<code>replace()</code>)可能會更高效。</p>
<h2 id="結論掌握正則表達式讓程式更智能">結論:掌握正則表達式,讓程式更智能</h2>
<p>總結來說,正則表達式是處理字串的強大工具,當與Python爬蟲結合使用時,能夠大大提高資料處理的效率和準確性。無論是初學者還是資深程式設計師,掌握正則表達式都能讓你的程式設計技能更上一層樓。讓我們在資料的海洋中暢遊吧,因為未來是屬於那些能夠熟練掌握數據的人!</p>
<hr>
<ul class="pager"><li class="previous">
<a href="https://www.recorderpress.com/how-to-build-restful-api-with-python/" data-toggle="tooltip" data-placement="top" title="如何用Python建構RESTful API讓開發變得輕鬆有趣?">←
Previous Post</a>
</li><li class="next">
<a href="https://www.recorderpress.com/python-download-guide/" data-toggle="tooltip" data-placement="top" title="Python下載教學!如何輕鬆安裝Python?">Next
Post →</a>
</li></ul></div>
<div class="
col-lg-2 col-lg-offset-0
visible-lg-block
sidebar-container
catalog-container">
<div class="side-catalog">
<hr class="hidden-sm hidden-xs">
<h5>
<a class="catalog-toggle" href="#">CATALOG</a>
</h5>
<ul class="catalog-body"></ul>
</div>
</div>
<div class="
col-lg-8 col-lg-offset-2
col-md-10 col-md-offset-1
sidebar-container">
<section>
<hr class="hidden-sm hidden-xs">
<h5><a href="https://www.recorderpress.com/tags/">FEATURED TAGS</a></h5>
<div class="tags"></div>
</section></div>
</div>
</div>
</article>
<footer>
<div class="container">
<div class="row">
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
<ul class="list-inline text-center"><li>
<a href="/cdn-cgi/l/email-protection#8beaefe6e2e5cbf9eee8e4f9efeef9fbf9eef8f8a5e8e4e6">
<span class="fa-stack fa-lg">
<i class="fas fa-circle fa-stack-2x"></i>
<i class="fas fa-envelope fa-stack-1x fa-inverse"></i>
</span>
</a>
</li><li>
<a href='' rel="alternate" type="application/rss+xml" title="Python全攻略:基礎、實例與數據分析" >
<span class="fa-stack fa-lg">
<i class="fas fa-circle fa-stack-2x"></i>
<i class="fas fa-rss fa-stack-1x fa-inverse"></i>
</span>
</a>
</li></ul>
<p class="copyright text-muted">
Copyright © Python全攻略:基礎、實例與數據分析 2024 <br></p>
</div>
</div>
</div>
</footer>
<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script>
function loadAsync(u, c) {
var d = document, t = 'script',
o = d.createElement(t),
s = d.getElementsByTagName(t)[0];
o.src = u;
if (c) { o.addEventListener('load', function (e) { c(null, e); }, false); }
s.parentNode.insertBefore(o, s);
}
</script>
<script>
if($('#tag_cloud').length !== 0){
loadAsync("/js/jquery.tagcloud.js",function(){
$.fn.tagcloud.defaults = {
color: {start: '#bbbbee', end: '#0085a1'},
};
$('#tag_cloud a').tagcloud();
})
}
</script>
<script>
loadAsync("https://cdn.jsdelivr.net/npm/fastclick@1.0.6/lib/fastclick.min.js", function(){
var $nav = document.querySelector("nav");
if($nav) FastClick.attach($nav);
})
</script>
<script type="text/javascript">
function generateCatalog(selector) {
_containerSelector = 'div.post-container'
var P = $(_containerSelector), a, n, t, l, i, c;
a = P.find('h1,h2,h3,h4,h5,h6');
$(selector).html('')
a.each(function () {
n = $(this).prop('tagName').toLowerCase();
i = "#" + $(this).prop('id');
t = $(this).text();
c = $('<a href="' + i + '" rel="nofollow">' + t + '</a>');
l = $('<li class="' + n + '_nav"></li>').append(c);
$(selector).append(l);
});
return true;
}
generateCatalog(".catalog-body");
$(".catalog-toggle").click((function (e) {
e.preventDefault();
$('.side-catalog').toggleClass("fold")
}))
loadAsync("\/js\/jquery.nav.js", function () {
$('.catalog-body').onePageNav({
currentClass: "active",
changeHash: !1,
easing: "swing",
filter: "",
scrollSpeed: 700,
scrollOffset: 0,
scrollThreshold: .2,
begin: null,
end: null,
scrollChange: null,
padding: 80
});
});
</script></body>
</html>