Python3 靜態爬蟲

更新 發佈閱讀 6 分鐘

有時候需要抓一些網路上的資料

而靜態網頁的呈現方式就是 html

這篇記錄一下怎麼用 Python3 抓靜態網頁上的文字

(以下部分為網路資料擷取)

開始

這裡以抓 ptt 網頁版為範例

網址 : https://disp.cc/b/PttHot

要爬靜態 html 之前

必須先了解"你要抓的文字"是在哪裡


raw-image

開啟網頁後, 按下 F12 可以看到每個元素對應到的 html 位置

左鍵按一下左下角的箭頭框框 (或按 ctrl+shift+C)

再把滑鼠指到你要抓的文字

然後再按一下左鍵

raw-image

可以看到這行文字出現在 html 的哪個位置
靜態爬蟲需要這樣的資訊

raw-image

程式碼

首先我們必須先有辦法存取這個網頁

這個部分 python3 已經有urllib.request包好了

如下

import urllib.request
url = "https://disp.cc/b/PttHot" # The website url you want to access
response = urllib.request.urlopen(url)
data = response.read()
text = data.decode('utf-8-sig')
print(text)

執行

py -3 main.py

可以看到這個網頁目前的 html 已經都抓下來了


raw-image

現在的目標就是抓取"你要抓的文字"

這個部分 python3 已經有BeautifulSoup包好了

from bs4 import BeautifulSoup
soup = BeautifulSoup(text, "lxml") # parse

回到剛剛上面利用 F12 所看到的 html 發現它的標題內容都是放在

span class = 'L34 nowrap listTitle', id = 'titleXXXXX'

其中 id 的部分 可以看到是第幾篇的意思, title52419, 第 52419 篇

也很剛好的, 在 list-num 就有顯示是第幾篇

span class = 'list-num'

因此這裡用 BeautifulSoup 裡面 find_all() 的方法 這裡帶有 span 裡面的 attribute 例如要找 list-num

soup = BeautifulSoup(text, "lxml") # parse
listIdxs = soup.body.find_all('span', attrs={'class':'list-num'}) # get all list

例如要找標題內容

targets = soup.body.find_all('span', attrs={'class':'L34 nowrap listTitle', 'id':'title52419'})
import urllib.request
from bs4 import BeautifulSoup

def downLoad():
url = "https://disp.cc/b/PttHot"

response = urllib.request.urlopen(url)
data = response.read() # a `bytes` object
text = data.decode('utf-8-sig') # a `str`; this step can't be used if data is binary
return text

print("downloading.. ")
print("=============================")
text = downLoad()
soup = BeautifulSoup(text, "lxml") # parse
listIdxs = soup.body.find_all('span', attrs={'class':'list-num'}) # get all list
for listIdx in listIdxs:
targets = soup.body.find_all('span', attrs={'class':'L34 nowrap listTitle', 'id':'title'+listIdx.text})
for ta in targets:
print(ta.text)

執行結果



raw-image


參考

https://www.ptt.cc/bbs/Python/M.1412756706.A.390.html

https://www.crummy.com/software/BeautifulSoup/bs4/doc/#searching-by-css-class

https://beautiful-soup-4.readthedocs.io/en/latest/

留言
avatar-img
留言分享你的想法!
avatar-img
LifeOfFProgrammer的沙龍
1會員
2內容數
你可能也想看
Thumbnail
在這一課中,我們將學習如何在Python中使用beautifulsoup4和requests模塊進行基本的網頁爬蟲。 首先,你需要安裝beautifulsoup4模塊,如果你還沒有安裝它的話:
Thumbnail
在這一課中,我們將學習如何在Python中使用beautifulsoup4和requests模塊進行基本的網頁爬蟲。 首先,你需要安裝beautifulsoup4模塊,如果你還沒有安裝它的話:
Thumbnail
在這篇文章中,我將簡要介紹如何使用Python來處理文件,包括如何打開、讀取、寫入和關閉文件。我也會給出一些範例程式碼和註解,讓你更容易理解和學習。要打開一個文件,我們需要使用open()函數,它接受文件名稱和模式兩個參數。文件名稱是一個字串,表示要訪問的文件的路徑和名稱。
Thumbnail
在這篇文章中,我將簡要介紹如何使用Python來處理文件,包括如何打開、讀取、寫入和關閉文件。我也會給出一些範例程式碼和註解,讓你更容易理解和學習。要打開一個文件,我們需要使用open()函數,它接受文件名稱和模式兩個參數。文件名稱是一個字串,表示要訪問的文件的路徑和名稱。
Thumbnail
上一篇我們已經介紹過Google Colab的基本用法,建議可以先行閱讀「【Google Colab系列】台股分析預備式: Colab平台與Python如何擦出火花?」,進行基本概念與環境的建置再進行下一步會比較容易進行學習。 雖然網路上已經提供非常多的股市資訊,但各個網站可能都零零散散,難免我們得
Thumbnail
上一篇我們已經介紹過Google Colab的基本用法,建議可以先行閱讀「【Google Colab系列】台股分析預備式: Colab平台與Python如何擦出火花?」,進行基本概念與環境的建置再進行下一步會比較容易進行學習。 雖然網路上已經提供非常多的股市資訊,但各個網站可能都零零散散,難免我們得
Thumbnail
其實要為專案建立操作介面的方式很多,除了網頁之外,還能另外寫個專門的手機 APP 連線,或是乾脆升級算法,讓我們能隨口喊一聲「嘿OO!」就搞定,不過⋯
Thumbnail
其實要為專案建立操作介面的方式很多,除了網頁之外,還能另外寫個專門的手機 APP 連線,或是乾脆升級算法,讓我們能隨口喊一聲「嘿OO!」就搞定,不過⋯
Thumbnail
一個網站可能除了首頁以外還會有其他的相關網站 例如/admin ,login/ ,home.php ,/root/等等 但是又不一定於是互聯網上就有一些words清單 像是 裡面就有存放各種可能的目錄名稱 例如給定一個網址在網址尾端增加/admin"有可能"就會連到後台 但是人手工一個一個去試去猜實
Thumbnail
一個網站可能除了首頁以外還會有其他的相關網站 例如/admin ,login/ ,home.php ,/root/等等 但是又不一定於是互聯網上就有一些words清單 像是 裡面就有存放各種可能的目錄名稱 例如給定一個網址在網址尾端增加/admin"有可能"就會連到後台 但是人手工一個一個去試去猜實
Thumbnail
到目前為止,我們都還是在附檔名為.py的Python檔案執行程式碼,當程式需要與外部的檔案互動,例如讀取文字、表格、或是影像來做分析,或是把程式執行的結果儲存下來,就需要能夠存取外部的檔案。例如,在上一節中,當貪食蛇遊戲結束之後,隨著程式停止執行,該次的分數也就被丟棄,若能將分數記錄下來,下次遊戲開
Thumbnail
到目前為止,我們都還是在附檔名為.py的Python檔案執行程式碼,當程式需要與外部的檔案互動,例如讀取文字、表格、或是影像來做分析,或是把程式執行的結果儲存下來,就需要能夠存取外部的檔案。例如,在上一節中,當貪食蛇遊戲結束之後,隨著程式停止執行,該次的分數也就被丟棄,若能將分數記錄下來,下次遊戲開
Thumbnail
一個網頁只會有一個h1 標籤(h1.p.img)裡面可以放多個屬性(src.background.color) 建立 HTML 環境 告訴大家這是html5的語法 關於整個專案的資訊放這裡面 頁籤標題 寫給別人看的要放這裡面 Emmet 預設安裝 /*語意使用英文*/ /*使
Thumbnail
一個網頁只會有一個h1 標籤(h1.p.img)裡面可以放多個屬性(src.background.color) 建立 HTML 環境 告訴大家這是html5的語法 關於整個專案的資訊放這裡面 頁籤標題 寫給別人看的要放這裡面 Emmet 預設安裝 /*語意使用英文*/ /*使
Thumbnail
安裝下載 在瀏覽器搜尋列上輸入python,找到官方網站後進入下方畫面。 Python 官方網站頁面 在Downloads下拉列表中,可以尋找使用者自己電腦對應的作業系統選項,而基本上旁邊會提供最新版本的選取方框,點擊並下載。
Thumbnail
安裝下載 在瀏覽器搜尋列上輸入python,找到官方網站後進入下方畫面。 Python 官方網站頁面 在Downloads下拉列表中,可以尋找使用者自己電腦對應的作業系統選項,而基本上旁邊會提供最新版本的選取方框,點擊並下載。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News