Web Crawler 爬蟲
lecturer:溫室蔡、乘一
課前隨便講講時間
-
課程內容:爬蟲、DCBot、人工智慧
-
有問題一定要舉手!!!
-
如果沒有學過Python,不用擔心,我們會幫助你~
什麼是爬蟲?
-
兩生類演化
-
變溫動物
-
常有鱗片覆蓋
-
大部分卵生
慢著我們是資訊社團
所以什麼是爬蟲?
-
自動搜尋全球資訊網(www)的機器人
-
可以對網站進行抓取
-
消耗目標網站資源
為甚麼要爬蟲?
-
繁瑣複雜工作由機器人執行
-
節省時間
-
提高效率
-
簡單來說就是我懶
抓取網頁HTML
我們會用到 requests 模組
pip install requests
在終端機輸入下列指令來安裝requests套件
requests
把網頁的html抓取下來!!!
import requests #匯入requests模組
url='https://ckefgisc.github.io/' #這是你想要爬的網址
html=requests.get(url) #get函式返回一個response物件
print(html.text) #.text返回網頁原始碼
btw 這是我們(還沒架好)的社網
requests
結果是...?
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://code.jquery.com/jquery-3.6.1.min.js"></script>
<script src="/scripts/include.js"></script>
<script src="/scripts/news.js"></script>
<link rel="stylesheet" href="/styles/index.css">
<title>建北電資 CKEFGISC</title>
</head>
<body>
<header></header>
<div id="main-container">
<div id="title-section" class="section">
<h1>全台最「電」</h1>
<h1>資訊系社團</h1>
<h2>建中電子計算機研習社×北一女中資訊研習社</h2>
<a href="https://www.instagram.com/ckeisc_42nd/">點我地社</a>
</div>
<div id="news-section" class="section">
<div class="section-title">
<p>最新消息</p>
</div>
<ul id="news-list" class="line-list"></ul>
</div>
<div id="lesson-section" class="section">
<div class="section-title">
<p>課程介紹</p>
</div>
<div id="lesson-links">
<a id="major-lesson" href="/lesson#major-class">大社課</a>
<a id="noon-lesson" href="/lesson#noon-class">北資中午小社課</a>
<a id="after-lesson" href="/lesson#after-class">建北電資聯合<br>放學小社課</a>
</div>
</div>
<div id="faq-section" class="section">
<div class="section-title">
<p>常見問答</p>
</div>
<ul class="line-list">
<li>
<p class="qq">Q:小社是星期幾?</p>
<p>A:</p>
<p>每天放學之後都有喔~(除了段考週和前一週)</p>
<p class="btn"><a class="btn_a" href="/lesson">點我看小社介紹</a></p>
</li>
<li>
<p class="qq">Q:學長姐,我有第八節,來得及來聽課嗎?</p>
<p>A:</p>
<p>可以喔!</p>
<p>我們基本上會等到北資的同學5:10下課可以安全走到建中的時間才開始上課,不論是北資還是建電的數資、科學班學生,都歡迎來參加小社!</p>
</li>
<li>
<p class="qq">Q:我要怎麼來聽社課呢?</p>
<p>A:</p>
<p>只要你是建北電資的社員,都可以直接來聽課,完全不用事先報名的啦XD</p>
</li>
</ul>
</div>
<div id="aboutsite-section" class="section">
<div class="section-title">
<p>關於本站</p>
</div>
<div class="aboutsite_sec">
<div class="aboutsite_title">緣起</div>
<div class="aboutsite_text">
建北電資以往皆有架設網站作為招生及宣傳用途。但是自從建電社辦的伺服器被學校沒收之後,一直以來都找不到一個良好的網站架設環境,也沒有一個地方讓學術們統一放置教材供學弟妹使用。因此,在一三上幹了之後,一二學術長檸檬便一直希望鹽亞倫可以將他們沒有做出的社網完成。因此,不會css的鹽亞倫便找了溫室菜以及北資學術長嗯嗯,嘗試從頭寫出一個網站,並且透過github pages進行架設。<br>
<div style="text-align: right;"><a href="/about/site.html" class="aaa">>>> 閱讀更多本站歷史</a></div>
</div>
</div>
<div class="aboutsite_sec">
<div class="aboutsite_title">製作團隊</div>
<div class="aboutsite_text">專案管理:建電42nd吳亞倫<br>網站架設:北資36th蘇怡恩、建電42nd蔡政廷<br>
<div style="text-align: right;"><a href="/about/site.html" class="aaa">>>> 更多本站資訊</a></div>
</div>
</div>
</div>
</div>
<footer></footer>
<script>
listNews(0, 4);
</script>
</body>
</html>
requests
status code
import requests #匯入requests模組
url='https://ckefgisc.github.io/' #這是你想要爬的網址
r=requests.get(url) #get函式返回一個response物件
print(r.status_code) #返回網頁狀態碼
#200
requests
headers
import requests #匯入requests模組
url='https://ckefgisc.github.io/'
r=requests.get(url)
print(r.headers) #返回headers
requests
偽裝headers
import requests
url = 'https://httpbin.org/'
headers = {"user-agent":"Mozilla/5.0"} #指定headers
r = requests.get(url, headers = headers)
requests
url參數
網址?參數=參數值&參數=參數值...
requests
修改url參數
import requests
#方法一
url = 'https://httpbin.org/get?key1=value1&key2=value2'
#直接指定網址
r = requests.get(url)
print(r.text)
#方法二
params = {"key1":"value1","key2":"value2"}
url = 'https://httpbin.org/get'
r = requests.get(url, params = params)
#利用params指定
print(r.text)
好ㄟ~
這堂課結束了!!!
才怪
怎樣才能在一大串的程式碼中,獲得我想要的東西呢?
解析HTML
我們會用到 beautifulsoup4 模組
pip install beautifulsoup4
在終端機輸入下列指令來安裝beautifulsoup4套件
解析HTML
怎麼做呢?
import requests #匯入requests模組
from bs4 import BeautifulSoup #注意大小寫!!!
#匯入bs4模組中的BeautifulSoup
url = 'https://ckefgisc.github.io/'
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
#要使用需要兩個參數,第一個是原始碼,第二個是解析方式
#把解析後的結果傳進soup
print(soup.prettify())#輸出排版後的HTML
看起來沒差?
解析HTML
取得標題
import requests
from bs4 import BeautifulSoup #注意大小寫!!!
url = 'https://ckefgisc.github.io/'
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
print(soup.title)
小試身手!
解析HTML
尋找標籤
import requests
from bs4 import BeautifulSoup #注意大小寫!!!
url = 'https://ckefgisc.github.io/'
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
print(soup.find('a'))#尋找<a>標籤
print(soup.find_all('a'))#尋找所有的<a>標籤
print(soup.find_all('p', limit=2))#尋找頭兩個<p>標籤
print(soup.find("div", class_="aboutsite_text"))
#尋找<div>標籤中的特定class的內容
解析HTML
取得超連結
import requests
from bs4 import BeautifulSoup #注意大小寫!!!
url = 'https://ckefgisc.github.io/'
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
for link in find_all('a'): #每一個<a>標籤中
print(link.get("href")) #取得擁有href屬性的東東
解析HTML
取得文字
import requests
from bs4 import BeautifulSoup #注意大小寫!!!
url = 'https://ckefgisc.github.io/'
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
print(soup.find('li').getText())#注意大小寫!
#印出第一個<li>內的文字
恭喜各位上完
第一堂Py小社課!!!
乘一好電orz
crawler
By times1-chang
crawler
- 230