iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 20
1
自我挑戰組

30天Python學習心得分享系列 第 20

Day 20 - 網路爬蟲(1)

Hi 大家好~~~
今天要分享的網路爬蟲部分,我覺得大家還是要去課程連結看一下會比較清楚喔!!!

網路爬蟲基本流程

1.連線到特定網址,抓取想要的資料。
2.解析資料,取得實際想要的部分。
3.抓取資料,盡可能地讓程式模仿一個普通使用者的樣子
4.解析資料,json格式就用json模組,但網路上的資料格式大多是HTML格式(<>角括號在HTML裡稱為標籤)
5.抓取的資料為HTML格式時,使用第三方套件BeautifulSoup來解析
6.安裝套件的程式碼 pip install beautifulsoup4

程式範例:

import urllib.request as req
url="https://www.ptt.cc/bbs/movie/index.html"
request=req.Request(url,headers={
    "User-Agent":"你網頁的程式碼"
})
# 使用 with request.urlopen(網址) 連上網路,並將其重新取名為 response ,最後使用 read() 函數,將網頁結果放入 data 中。
with req.urlopen(request) as response: 
    data=response.read().decode("utf-8")# 取的網頁的原始碼。並用decode("utf-8")來翻譯成中文(解碼)。
print(data)

#解析原始碼,取得每篇文章的標題
# 載入 bs4 套件。
import bs4
root=bs4.BeautifulSoup(data,"html.parser") # 利用上方載入套件做解析:變數 data 是剛在網路上抓到的資料,丟給 beautifulsoup4,他會幫我們用 html 解析。 
# 使用 ".find" 可以幫助我們找到符合一個以下條件的東西:
titles=root.find("div",class_="title") #尋找class="title"的div標籤
print(root.title) # .title :抓取網頁標題。<title> 以及 </titl3> 分別代表開始與結束。
print(root.title.string) # .title.string :抓取標籤內的文字。(不會再顯示印出上方時句首句末會出現的 <title> 以及 </titl3>)
print(titles) # 印出剛剛上面找到的標籤。這裏 titles 代表上面找到的 div 標籤。
print(titles.a.string) # 加上 ".a" 代表我們剛剛找到的那個 div 標籤底下的 <a> 裡面的東西; ".string" 則是抓取前面 "titles.a" 抓到的東西的文字。

# 使用 ".find_all" 可以幫助我們找到「全部」符合以下條件的東西:
titles = root.find_all("div", class_="title") # 尋找所有 class = "title" 的 div 標籤。
print(titles) # 印出剛剛上面找到的標籤。這裏 titles 代表上面找到的 div 標籤。

# 做完上面動作之後,會發現印出來的資料是一個列表的形式,所以我們嘗試使用 for 迴圈將標題資料抓出來:

for title in titles:
    if title.a != None: # 如果標題包含<a>標籤(沒有被刪除),印出來(!=是不等於)
        print(title.a.string) # 如果「不是None」這件事發生,則印出標題("titles.a" 抓到的東西的文字)。

以上,就是今天的學習心得分享,
若文章有錯誤的部分,請前輩們不吝指正,謝謝大家!
/images/emoticon/emoticon41.gif


上一篇
Day 19 - 實體物件的建立與使用(2)
下一篇
Day 21 - 網路爬蟲(2)
系列文
30天Python學習心得分享30

尚未有邦友留言

立即登入留言