切換
舊版
前往
大廳
主題

Python筆記Day9-爬場外標題的蟲蟲

萬念俱灰的人最強 | 2019-07-30 00:18:43 | 巴幣 0 | 人氣 487

在Python爬蟲界,誰不認識B哥(BeautifulSoup)?

Python之所以被說很好上手,其中一個原因是很多你想的到的功能,網路上都已經有人寫好套件了,你只需要開啟cmd或是其他的文字介面,pip install xxx,再看看套件怎麼用就好。

今天我們要pip的東西有兩個,requests和BeautifulSoup。

pip完這兩個套件後,就可以開始我們今天的標題了。
至於為什麼要爬場外休憩區?爬一個從國中荼毒我到現在的地方需要理由嘛?

首先,呼叫這兩個套件
import requests
from bs4 import BeautifulSoup
再來,就是我們要的場外網址:
url = "https://forum.gamer.com.tw/B.php?bsn=60076"
當然你要放別的網址也可以,僅限巴哈的其它看板。像是Steam板 : https://forum.gamer.com.tw/B.php?bsn=60599

#向目標網址傳送一個Get的請求。其實url可以不用特地分開啦,只是個人習慣。r = requests.get(url)r = requests.get("https://forum.gamer.com.tw/B.php?bsn=60076")
#將我們get下來的東西,用html.parser解析
soup = BeautifulSoup(r.text,"html.parser")

#呼叫find_all函數,找尋標籤a中的class:b-list__main__title

官方的範例:
soup.find_all("p", "title")# [<p class="title"><b>The Dormouse's story</b></p>]

sel = soup.find_all("a","b-list__main__title")
抓下來的東西,我記得是以List的形式

# 我們再用for迴圈打印出來
for i in sel:
    print(i.string)
    print("https://forum.gamer.com.tw/"+i["href"])

完整程式碼:
import requests
from bs4 import BeautifulSoup

url = "https://forum.gamer.com.tw/B.php?bsn=60076"
r = requests.get(url)
soup = BeautifulSoup(r.text,"html.parser")
sel = soup.find_all("a","b-list__main__title")

for i in sel:
    print(i.string)
    print("https://forum.gamer.com.tw/"+i["href"])

執行結果:
【投稿】場外進版圖招募 (請注意要用新size了喔~)
https://forum.gamer.com.tw/C.php?bsn=60076&snA=3919777&tnum=342
【公告】場外置頂板務建議區
https://forum.gamer.com.tw/C.php?bsn=60076&snA=4548839&tnum=152
【公告】場外精華好文推薦區《誠徵精華組員》
https://forum.gamer.com.tw/C.php?bsn=60076&snA=4549786&tnum=122
【討論】新增板規投票的討論
https://forum.gamer.com.tw/C.php?bsn=60076&snA=5113102&tnum=165
【認真】雨過天晴,我們總會和你站在一起
https://forum.gamer.com.tw/C.php?bsn=60076&snA=5169835&tnum=51
【討論】想學投資的都進來 更新學生該如何投資定期定額(創了一個Line群歡迎加入)
https://forum.gamer.com.tw/C.php?bsn=60076&snA=5224676&tnum=139
【閒聊】在學畫畫的 聽到什麼會發瘋啊....
https://forum.gamer.com.tw/C.php?bsn=60076&snA=5235711&tnum=1
【閒聊】議員指控警察幫館長圍事? 新北警方說話了
https://forum.gamer.com.tw/C.php?bsn=60076&snA=5234996&tnum=15
【楓谷】拒絕85代製代洗代抽,新職業開拓者+14週年活動
https://forum.gamer.com.tw/C.php?bsn=60076&snA=4667536&tnum=56254
【閒聊】總是有某些人,天天都看的到它發文
https://forum.gamer.com.tw/C.php?bsn=60076&snA=5235710&tnum=1
【心得】克洛船長太強了吧
https://forum.gamer.com.tw/C.php?bsn=60076&snA=5234999&tnum=17
【場外MLTD串】 #10673:52天眾製作方法,估狗精生日快樂 !
https://forum.gamer.com.tw/C.php?bsn=60076&snA=4019057&tnum=10977
【閒聊】F1賽車討論串 德國站end max冠軍
https://forum.gamer.com.tw/C.php?bsn=60076&snA=4326047&tnum=571
【閒聊】剛剛店長叫我報到惹
https://forum.gamer.com.tw/C.php?bsn=60076&snA=5235705&tnum=3
【問題】這是什ㄇ動漫的截圖ㄚ(誰再貼破貓圖等著被吊起抽插==)
https://forum.gamer.com.tw/C.php?bsn=60076&snA=4629987&tnum=1420
【心得】肥宅就是要活的有自信
https://forum.gamer.com.tw/C.php?bsn=60076&snA=5235600&tnum=16
【情報】十歲女童遭假GM要求做…「裸照驗證」!不然將封鎖遊戲
https://forum.gamer.com.tw/C.php?bsn=60076&snA=5235617&tnum=4
【閒聊】我是靠著愛去面對社會的黑暗面的
https://forum.gamer.com.tw/C.php?bsn=60076&snA=5235380&tnum=6
【問題】在這串回復的人都能拿到6倍ㄊㄓ
https://forum.gamer.com.tw/C.php?bsn=60076&snA=5235230&tnum=21
【討論】場外貓咪大戰爭串
https://forum.gamer.com.tw/C.php?bsn=60076&snA=3861316&tnum=2865
【閒聊】來幫樓上想一個符合他的暱稱的超能力吧~
https://forum.gamer.com.tw/C.php?bsn=60076&snA=5235702&tnum=9
【問題】健身少女會不會反而比拳願阿修羅還紅
https://forum.gamer.com.tw/C.php?bsn=60076&snA=5203151&tnum=5
【心得】CREEPER?
https://forum.gamer.com.tw/C.php?bsn=60076&snA=5235269&tnum=68
【情報】我是羅大佑看著我 卡緊結束ㄟ
https://forum.gamer.com.tw/C.php?bsn=60076&snA=5072695&tnum=9
場外魔物(MHW)串 第548天 倒數40天 官方送一顆攻擊珠記得上線拿
https://forum.gamer.com.tw/C.php?bsn=60076&snA=4717517&tnum=2327
【問題】麥當勞報報有夠難用
https://forum.gamer.com.tw/C.php?bsn=60076&snA=5235709&tnum=1
【閒聊】7/29 每日動物朋友 & 煙草
https://forum.gamer.com.tw/C.php?bsn=60076&snA=5234045&tnum=26
【問題】為什麼我甚麼事情都做不好
https://forum.gamer.com.tw/C.php?bsn=60076&snA=5235703&tnum=5
【討論】假如有隔空巴五毛的超能力?
https://forum.gamer.com.tw/C.php?bsn=60076&snA=5235659&tnum=4
【問題】去應徵工作20家是基本嗎
https://forum.gamer.com.tw/C.php?bsn=60076&snA=5235613&tnum=19

參考資料:

-----分隔線-----
更新寫法

from bs4 import BeautifulSoup
import urllib.request as req

url = "https://forum.gamer.com.tw/B.php?bsn=60076"

# 建立一個Request物件 .附加RequestHeaders的資訊
request = req.Request(url,headers={"User-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36'
})
with req.urlopen(request) as response:
    data = response.read().decode('utf-8')

soup = BeautifulSoup(data,"html.parser")
sel = soup.find_all("a","b-list__main__title")

for i in sel:
    print(i.string)
    print("https://forum.gamer.com.tw/"+i["href"])

創作回應

超負荷
不知道是不是巴哈的html標籤有更動,只能查到置頂文章

將find_all後的("a","b-list__main__title")改為(class_="b-list__main__title")
即可查詢到當頁所有文章了
2021-07-03 20:55:21
萬念俱灰的人最強
沒錯 我後來有更新寫法就是標籤變了
2021-07-03 21:04:07

更多創作