iT邦幫忙

0

用 Python 暢玩 Line bot - 26:爬蟲(一)

  • 分享至 

  • xImage
  •  

這次要嘗試的是將爬蟲與 line bot做結合,那你可以使用 line bot 就能夠查詢到本周上映的新片。

首先要安裝下列套件

pipenv install requests
pipenv install BeautifulSoup4
pipenv install lxml

  • requests:用來處理 HTTP 請求
  • BeautifulSoup4、lxml:用來解析處理requests取得的數據
import requests
from bs4 import BeautifulSoup

#GET請求
r = requests.get('http://www.atmovies.com.tw/movie/new/')
r.encoding = 'utf-8'

soup = BeautifulSoup(r.text, 'lxml')
print(soup)

為了避免抓取到的內容用 Unicode 解析時出現亂碼,我們可以設定 encoding 為 utf-8。

再來因為想要挖的是本周新片的標題與網址,那我們可以先到網頁那邊看看他的原始碼。
https://ithelp.ithome.com.tw/upload/images/20211030/20142564DU0eZt16BX.png

可以看到他的標題與網址部分是在 class 名稱為 filmTitle 的 div 裡面的 a 標籤中。因此,我們可以將程式碼改成下列樣子。

import requests
from bs4 import BeautifulSoup

r = requests.get('http://www.atmovies.com.tw/movie/new/')
r.encoding = 'utf-8'

soup = BeautifulSoup(r.text, 'lxml')

filmTitle = soup.select('div.filmTitle a')
print(filmTitle)

輸出結果會是

[<a href="/movie/fwcn26679049/">瀑布 The Falls </a>,
<a href="/movie/fren47504818/">天兵阿榮 Ron's Gone Wrong </a>,
......
]

soup.select('div.filmTitle a')代表的是我們想要取得 class 名稱為 filmTitle 的 div 中的 a 標籤。

但我們只想要 a 標籤內的文字跟網址部分,那就需要更精準的指令。

import requests
from bs4 import BeautifulSoup

r = requests.get('http://www.atmovies.com.tw/movie/new/')
r.encoding = 'utf-8'

soup = BeautifulSoup(r.text, 'lxml')

filmTitle = soup.select('div.filmTitle a')
print(filmTitle[0].text)
print("http://www.atmovies.com.tw/" + filmTitle[0]['href'])

我們只要 filmTitle[0] 裡的文字(也就是第一部電影的名稱),所以使用filmTitle[0].text。
而 href 得內容只有 /movie/fren47504818/,還不是一個有效的網址,所以我們需要在前面加上 http://www.atmovies.com.tw/


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言