[問題] 電影時刻表爬蟲新手問題

看板Python作者 (無敵風火輪)時間7年前 (2018/04/17 11:04), 編輯推噓2(2010)
留言12則, 3人參與, 7年前最新討論串1/1
最近在練習寫爬蟲,又被一些基本觀念的問題給卡住了,以下是威秀影城的爬蟲程式碼。 #復仇者聯盟頁面 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

04/17 11:38, 7年前 , 1F
把你的迴圈 for div in divs 內的 name,date拉出來
04/17 11:38, 1F

04/17 11:39, 7年前 , 2F
time部份去做一個小dict,迴圈跑完,再塞到movie['time']
04/17 11:39, 2F

04/17 11:46, 7年前 , 3F
1.關鍵字datetime format 去找個lib把中文時間轉date類
04/17 11:46, 3F

04/17 11:46, 7年前 , 4F
型 再轉成你要的格式
04/17 11:46, 4F

04/17 11:47, 7年前 , 5F
2.你可能要先把json轉成強型別物件 dict、class、tuple
04/17 11:47, 5F

04/17 11:48, 7年前 , 6F
之類的 再用名稱做group by 把時間撈出來成一個list
04/17 11:48, 6F

04/17 12:31, 7年前 , 7F
時間的部份,我應該會用re取出
04/17 12:31, 7F

04/17 12:39, 7年前 , 8F
或是用datetime內的strptime也可 只是星期幾的部份
04/17 12:39, 8F

04/17 12:40, 7年前 , 9F
比較麻煩點,是否有其他高手一行文?
04/17 12:40, 9F

04/17 12:46, 7年前 , 10F
星期幾反正根本不需要, 直接 [:-3] 去掉就好
04/17 12:46, 10F

04/17 12:47, 7年前 , 11F
同意樓上,因為有日期後,自然可以用isoweekday重現
04/17 12:47, 11F

04/18 14:34, 7年前 , 12F
啊 我看錯問題了 日期直接取出來即可
04/18 14:34, 12F
文章代碼(AID): #1QrMHLV2 (Python)
文章代碼(AID): #1QrMHLV2 (Python)