Python3 靜態爬蟲

閱讀時間約 5 分鐘
有時候需要抓一些網路上的資料
而靜態網頁的呈現方式就是 html
這篇記錄一下怎麼用 Python3 抓靜態網頁上的文字
(以下部分為網路資料擷取)

開始

這裡以抓 ptt 網頁版為範例
要爬靜態 html 之前
必須先了解"你要抓的文字"是在哪裡
開啟網頁後, 按下 F12 可以看到每個元素對應到的 html 位置
左鍵按一下左下角的箭頭框框 (或按 ctrl+shift+C)
再把滑鼠指到你要抓的文字
然後再按一下左鍵
可以看到這行文字出現在 html 的哪個位置
靜態爬蟲需要這樣的資訊

程式碼

首先我們必須先有辦法存取這個網頁
這個部分 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 已經都抓下來了
現在的目標就是抓取"你要抓的文字"
這個部分 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)

執行結果

參考

1會員
2Content count
留言0
查看全部
發表第一個留言支持創作者!
心血來潮突然想用google excel來記錄每天的花費 有一些小地方想用指令碼來方便自己作業
心血來潮突然想用google excel來記錄每天的花費 有一些小地方想用指令碼來方便自己作業
你可能也想看
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
  在計算數字時我們要先搞懂運算符號代表的涵義,Python裡面的符號跟我們認知的不會有太大的差別,但是有一些代表不一樣的意思,就必須搞懂才不會在寫程式時,程式碼的重複性太高,會導致日後的維修性降低。
Thumbnail
常常會遇到好不容易寫好程式,但是輸出的時候沒辦法按照自己想要的格式,或是間隔來輸出,這時需要用到的就是格式化輸出,格式化輸出就是調整排版的一個形式。
Thumbnail
一、什麼是變數?   變數是指用來代表某一種資料型態的符號,以非數字的符號來表達,可以是英文字母也可以是一個英文單字,不過python有一些英文字母不能被當作變數,我們稱作保留字,例如:False、None、True、and、is、not、or、......,之後會在介紹。
Thumbnail
IDE是甚麼? IDE又叫做整合開發環境(Integrated Development Environment),在編輯程式碼時有許多的步驟,例如撰寫、編譯、除錯、執行......等過程,都是分開進行,但現在可以在同一個環境下開發,而使用的這些環境正是IDE。
Thumbnail
PYTHON 介紹 Python 是一種被廣泛使用的高階編程語言,它的用途十分廣泛,支援了多種的程式設計的範式,包括函數式、指令式、結構化、物件導向。 Python的設計哲學強調了它簡潔的語法,是使用空格縮進來劃分程式碼。 Python是的社群中擁有許多模組可以使用,在進行某些用途時可以很引入模組,
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
  在計算數字時我們要先搞懂運算符號代表的涵義,Python裡面的符號跟我們認知的不會有太大的差別,但是有一些代表不一樣的意思,就必須搞懂才不會在寫程式時,程式碼的重複性太高,會導致日後的維修性降低。
Thumbnail
常常會遇到好不容易寫好程式,但是輸出的時候沒辦法按照自己想要的格式,或是間隔來輸出,這時需要用到的就是格式化輸出,格式化輸出就是調整排版的一個形式。
Thumbnail
一、什麼是變數?   變數是指用來代表某一種資料型態的符號,以非數字的符號來表達,可以是英文字母也可以是一個英文單字,不過python有一些英文字母不能被當作變數,我們稱作保留字,例如:False、None、True、and、is、not、or、......,之後會在介紹。
Thumbnail
IDE是甚麼? IDE又叫做整合開發環境(Integrated Development Environment),在編輯程式碼時有許多的步驟,例如撰寫、編譯、除錯、執行......等過程,都是分開進行,但現在可以在同一個環境下開發,而使用的這些環境正是IDE。
Thumbnail
PYTHON 介紹 Python 是一種被廣泛使用的高階編程語言,它的用途十分廣泛,支援了多種的程式設計的範式,包括函數式、指令式、結構化、物件導向。 Python的設計哲學強調了它簡潔的語法,是使用空格縮進來劃分程式碼。 Python是的社群中擁有許多模組可以使用,在進行某些用途時可以很引入模組,