作者students (無敵風火輪)
看板Python
標題[問題] 電影時刻表爬蟲新手問題
時間Tue Apr 17 11:04:51 2018
最近在練習寫爬蟲,又被一些基本觀念的問題給卡住了,以下是威秀影城的爬蟲程式碼。
#復仇者聯盟頁面
MOVIE_URL = '
http://www.vscinemas.com.tw/vsTicketing/ticketing/ticket.aspx?cin
ema=1|TP&movie=HO00006836'
#確認URL存在
def get_web_page(url):
resp = requests.get(url)
if resp.status_code != 200:
print('無效的URL:',resp.url)
return None
else:
return resp.text
#找出電影資訊的模組
def get_movie(dom):
soup = BeautifulSoup(dom,'html5lib')
movies = []
divs = soup.find('ul','bookList').find_all('li')
for div in divs:
movie = dict()
movie['name'] = soup.find('div','movieDescribe').h1.text
movie['date'] = div.parent.find_previous_sibling('h4').text
movie['time'] = div.text
movies.append(movie)
return movies
#主程式模組
def main():
page = get_web_page(MOVIE_URL)
if page:
s = get_movie(page)
print(s)
for a in s:
print(a['name'],a['date'],a['time'])
if __name__ == '__main__':
main()
--------------執行結果-----------
[{'name': '(4DX 3D)復仇者聯盟 3:無限之戰', 'date': '2018 年 04 月 25 日 星期
三', 'time': '13:30'}, {'name': '(4DX 3D)復仇者聯盟 3:無限之戰', 'date': '201
8 年 04 月 25 日 星期三', 'time': '16:30'}, {'name': '(4DX 3D)復仇者聯盟 3:無
限之戰', 'date': '2018 年 04 月 25 日 星期三', 'time': '19:30'}, {'name': '(4D
X 3D)復仇者聯盟 3:無限之戰', 'date': '2018 年 04 月 25 日 星期三', 'time': '0
1:30(隔日)'}]
(4DX 3D)復仇者聯盟 3:無限之戰 2018 年 04 月 25 日 星期三 13:30
(4DX 3D)復仇者聯盟 3:無限之戰 2018 年 04 月 25 日 星期三 16:30
(4DX 3D)復仇者聯盟 3:無限之戰 2018 年 04 月 25 日 星期三 19:30
(4DX 3D)復仇者聯盟 3:無限之戰 2018 年 04 月 25 日 星期三 01:30(隔日)
有兩個問題:
1.我想把電影時刻的time變成這樣,我在def get_movie()要怎麼寫比較好。
{'name': '(4DX 3D)復仇者聯盟 3:無限之戰', 'date': '2018 年 04 月 25 日 星期三
', 'time': '13:30 , 16:30 , 19:30, 01:30(隔日)’}
2.想直接在主程式區塊列印出這樣的格式
(4DX 3D)復仇者聯盟 3:無限之戰 2018 年 04 月 25 日 星期三 13:30 , 16:30 , 19:3
0, 01:30(隔日)
謝謝大家
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.217.160.180
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1523934293.A.7C2.html
推 coeric: 把你的迴圈 for div in divs 內的 name,date拉出來 04/17 11:38
→ coeric: time部份去做一個小dict,迴圈跑完,再塞到movie['time'] 04/17 11:39
推 vi000246: 1.關鍵字datetime format 去找個lib把中文時間轉date類 04/17 11:46
→ vi000246: 型 再轉成你要的格式 04/17 11:46
→ vi000246: 2.你可能要先把json轉成強型別物件 dict、class、tuple 04/17 11:47
→ vi000246: 之類的 再用名稱做group by 把時間撈出來成一個list 04/17 11:48
→ coeric: 時間的部份,我應該會用re取出 04/17 12:31
→ coeric: 或是用datetime內的strptime也可 只是星期幾的部份 04/17 12:39
→ coeric: 比較麻煩點,是否有其他高手一行文? 04/17 12:40
→ uranusjr: 星期幾反正根本不需要, 直接 [:-3] 去掉就好 04/17 12:46
→ coeric: 同意樓上,因為有日期後,自然可以用isoweekday重現 04/17 12:47
→ vi000246: 啊 我看錯問題了 日期直接取出來即可 04/18 14:34