前言
之前有一個任務是我需要去爬取 Google 文件中的一些內容,
因此就產生了這一篇程式碼,用這篇文章來作為紀錄。
在本文中,我們將示範如何使用 requests
和 BeautifulSoup
來抓取 Google 文件中的內容。
範例程式碼
import requests
from bs4 import BeautifulSoup
url = "google 文件網址, 記得改為 public 發布後, 才能讓程式爬取"
def read_google_doc(url):
response = requests.get(url)
if response.status_code != 200:
print("Error fetching page")
exit()
else:
content = response.content
soup = BeautifulSoup(response.content, 'html.parser')
# print(content)
all_results = str(soup.select('#contents > div'))
replace_list = ['<p class="c1">', '<div class="c3 doc-content">', '<p class="c0 c2">', '<span class="c0">', '</p>', '</span>', '<p class="c1 c3">', '</div>', '<div class="c2 doc-content">', '<p class="c0">', '<span class="c1">']
for each_word in replace_list:
all_results = all_results.replace(each_word, "")
all_results = all_results.replace(" ","")
return text_spliter(all_results)
使用 requests 抓取網頁內容
def read_google_doc(url):
response = requests.get(url)
if response.status_code != 200:
print("Error fetching page")
exit()
else:
content = response.content
在這段程式碼中,我定義了一個 read_google_doc
函數,
該函數接受一個 「google doc 公開文件的網址」 作為參數。
接著,我們使用 requests.get()
函數發送 HTTP 請求,並檢查返回的狀態碼。
如果狀態碼不是 200(200 表示成功),
我們將輸出錯誤信息並退出。否則,我們將網頁內容保存到 content
變量中。
使用 BeautifulSoup
解析網頁內容
soup = BeautifulSoup(response.content, 'html.parser')
all_results = str(soup.select('#contents > div'))
我們再來使用 BeautifulSoup
解析網頁內容。
首先,我們將剛剛從拿到的 response 裡面,取得 content
傳給 BeautifulSoup
,
並指定解析器為 'html.parser'
。
接著,我們使用 soup.select()
函數選擇所需的元素,保存到 all_results
中。
這邊有個小技巧,我們可以使用網頁的開發工具 (F12) 來快速幫我們找到我們想要的解析路徑,
F12 -> 找到對應的 html 片段 -> 右鍵「copy selector」
處理網頁內容
在處理網頁內容時,我們需要將多餘的 HTML 標籤移除,以便得到乾淨的文字。
我們可以通過遍歷需要替換的標籤列表來實現這一目標:
以下內容 replace 很多很雜,基本上應該還有更簡單俐落的做法,不過這邊只是記錄用, 就沒有另外特別整理
replace_list = ['<p class="c1">', '<div class="c3 doc-content">', '<p class="c0 c2">', '<span class="c0">', '</p>', '</span>', '<p class="c1 c3">', '</div>', '<div class="c2 doc-content">', '<p class="c0">', '<span class="c1">']
for each_word in replace_list:
all_results = all_results.replace(each_word, "")
all_results = all_results.replace(" ","")
replace_list 保存了所有我們要替換的內容,
可以讓我們在後續處理時處理掉這些多餘的字元,
最後我們再用 replace 進行替換。
並且透過 replace(” “,””),快速的把文件內的空白全部消除掉。
到這邊我們就已經完成了,可以把一份乾淨的 Google 文件裡面,裡面的文字內容,全部爬取出來的全部過程。