Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
東眾籌網(wǎng)址鏈接:https://z.jd.com/project/details/1816856838.html
編程是不是該從小學(xué)起,看完這篇,或許你心中會有答案
假如你也曾經(jīng)是個游戲迷,那么,這款曾風(fēng)靡一時的《我的世界》,相信你應(yīng)該不會太過陌生。
在這款極具開放性的游戲里,玩家能夠憑借自己無盡的想象力,打造、創(chuàng)造一個只屬于自己的世界,這就是《我的世界》的魅力。
其實,早在很久以前,許多家長,培訓(xùn)機(jī)構(gòu),甚至是校園,就已經(jīng)意識到了樂高對孩子智力開發(fā)的重要性。加強(qiáng)孩子這方面的培養(yǎng)和教育,一來能夠培養(yǎng)孩子的空間想象力,二來還能培養(yǎng)孩子的自我創(chuàng)造能力。
倘若再將編程的思維融入其中,甚至還能培養(yǎng)孩子的機(jī)器人設(shè)計能力,同時在這個過程中,提高他們的專注能力。
正因為發(fā)現(xiàn)了編程的重要性,甚至連國家都“強(qiáng)插一手”,在部分地區(qū),將計算機(jī)編程這門科目,納入了高考。
其實,早在2016年的美國,政府就已經(jīng)將計算機(jī)編程的成績算進(jìn)了高中畢業(yè)的學(xué)分之中;而2017年的英國,甚至都將學(xué)習(xí)編程這項科目,納入了小學(xué)必修課程當(dāng)中。我們在這個時候才意識到編程的重要性,雖然還不算太遲,但若不開始抓緊,那就很有可能再一次與世界拉開一段距離。
其實仔細(xì)想想就會明白,無論是被人們封神的蘋果創(chuàng)始人喬布斯、或是福布斯首富兼微軟創(chuàng)始人比爾蓋茨無一不是從小就開始學(xué)習(xí)編程,然后終此一生投身于科技事業(yè),這些無一不在編程的重要性。
那么,問題就來了,應(yīng)該如何從小開始學(xué)習(xí)編程呢?是應(yīng)該加入培訓(xùn)班嗎?畢竟編程這種的課程不是語數(shù)英,一般父母很少接觸,想讓每個父母在孩子小的時候就手把手教,這并不現(xiàn)實。
其實吧,學(xué)習(xí)這種東西,最重要看興趣,在孩子小的時候就強(qiáng)行將孩子送入教育“味道”過于濃厚的培訓(xùn)機(jī)構(gòu)中,不僅可能無法讓孩子對編程產(chǎn)生興趣,甚至?xí)尯⒆游磥韺幊踢@門課產(chǎn)生陰影。因此,娛樂性就很重要了。
其實讓孩子從小開始接觸編程的話,給孩子選一臺兼具娛樂性和教育性的編程機(jī)器人是一個不錯的選擇。在這一方面,小二極客團(tuán)隊就很有發(fā)言權(quán)了。
這是一個深耕編程機(jī)器人開發(fā)多年的專業(yè)團(tuán)隊,在提供了小R編程機(jī)器人系列的同時,還提供了易用的套件、先進(jìn)的代碼結(jié)構(gòu)、快捷的開發(fā)方式,更重要的是,還提供了一整套易入門的電子類課程,全面為孩子們提供了一套以寓教于樂為中心的系統(tǒng)教育教學(xué)機(jī)器人系列。
說到小R編程機(jī)器人,不得不安利一下這款由小二極客團(tuán)隊最新研發(fā)的這款人形機(jī)器人了。
人形的外觀,對于孩子來說,是具有絕對的親切感的。這樣的設(shè)計,打破了以往機(jī)器人給人的冰冷的感覺。
還注入了多種多樣的互動元素。
摸摸頭,自行啟動賣萌技能
來一段節(jié)奏,跳個舞給你看
還能做指南針,幫孩子復(fù)習(xí)一下地理
這些事先設(shè)定好的程序代碼,孩子既可以通過軟件直接導(dǎo)入,也可以自行重新編入,有趣好玩,孩子學(xué)起來也開心。
至于編程的開發(fā)板也很良心,是可以兼容業(yè)內(nèi)常用的micro:bit編程方式的開發(fā)板,在中小學(xué)生編程教育中十分流行,編程畫面十分有趣,孩子可以輕松上手。
手機(jī)端、PC端都可用,孩子喜歡用哪個平臺就用哪個平臺。
還有一整套完善的編程課程,讓孩子學(xué)習(xí)編程就像玩一樣簡單。
除了編程,他還是孩子休閑是的遙控機(jī)器人,閑暇時候,還能跟隔壁孩子一起來場“機(jī)器人”對決。
現(xiàn)在,這款小R編程機(jī)器人正在京東眾籌平臺火熱眾籌中,登陸京東眾籌頁面,輸入關(guān)鍵詞“小R智能編程機(jī)器人”即可了解更多詳情。
“
感覺只要學(xué)過Python爬蟲的同學(xué)應(yīng)該都知道requests這個庫吧,它在我們的Python爬蟲任務(wù)中應(yīng)該是最常用的一個庫了!今天跟大家分享的這個模塊requests_html,他的作者和前者是同一人!這是一個解析HTML的庫,用起來和requests一樣方便,下面就來介紹一下它!
”
#!/usr/bin/env python3
# coding : utf-8
# Author : xiao qiang
# 微信公眾號 : xiaoqiangclub
# Software : PyCharm
# File : test.py
# Time : 2021/5/29 7:57
from requests_html import HTMLSession
if __name__ == '__main__':
url = 'https://wwww.baidu.com'
session = HTMLSession() # 獲取實例化session對象
r = session.get(url) # 這里的請求和requests的幾乎一樣!同樣可以根據(jù)需要添加headers等參數(shù)
#!/usr/bin/env python3
# coding : utf-8
# Author : xiao qiang
# 微信公眾號 : xiaoqiangclub
# Software : PyCharm
# File : test.py
# Time : 2021/5/29 7:57
from requests_html import HTMLSession
if __name__ == '__main__':
url = 'https://wwww.baidu.com'
session = HTMLSession() # 獲取實例化session對象
r = session.get(url) # 這里的請求和requests的幾乎一樣!同樣可以根據(jù)需要添加headers等參數(shù)
# 獲取html頁面
# html = r.content.decode() # requests方式
get_html = r.html.html # requests_html中的方法
print(get_html[:15], '...')
# 快速獲取鏈接
pprint(r.html.links) # 獲取html中的鏈接(href屬性)
pprint(r.html.absolute_links) # 會自動拼接url生成絕對鏈接
def xpath(self, selector: str, *, clean: bool = False, first: bool = False, _encoding: str = None) -> _XPath:
- selector,要用的 xpath選擇器;
- clean,布爾值,如果為True,會清除HTML中style和script標(biāo)簽;
- first,布爾值,如果為True,會返回第一個元素,否則會返回滿足條件的元素列表;
- _encoding,編碼格式。
pprint(r.html.xpath('//li[@class="hotsearch-item odd"]/a'))
pprint(r.html.xpath('//li[@class="hotsearch-item odd"]/a', first=True).text)
def find(self, selector: str = "*", *, containing: _Containing = None, clean: bool = False, first: bool = False, _encoding: str = None) -> _Find:
- selector,要用的CSS選擇器;
- clean,布爾值,如果為True,會清除HTML中style和script標(biāo)簽;
- containing,如果設(shè)置該屬性,只返回包含該屬性文本的標(biāo)簽;
- first,布爾值,如果為True,會返回第一個元素,否則會返回滿足條件的元素列表;
- _encoding,編碼格式。
pprint(r.html.find('a.mnav'))
pprint(r.html.find('a.mnav', first=True).text)
pprint(r.html.find('a.mnav')[0].text)
pprint(r.html.find('a.mnav')[0].attrs)
pprint(r.html.find('a.mnav')[0].html)
def search(self, template: str) -> Result:
# 只有一個參數(shù)
template: 就是要檢索的內(nèi)容,這里使用英文狀態(tài)的 {} 來獲取內(nèi)容,有點(diǎn)類似正則里面的 ()
ret = r.html.find('a.mnav')[0].search('新{}')
pprint(ret)
pprint(type(ret))
pprint(ret[0])
ret=r.html.find('a.mnav')[0].search_all('新{}')
pprint(ret)
pprint(type(ret))
pprint(ret[0][0])
ret=r.html.search_all('百度{}')
pprint(ret)
pprint(type(ret))
pprint(ret[0][0])
search補(bǔ)充
>>> from requests_html import HTML
>>> doc = """<a href='https://www.baidu.com'>"""
>>> html = HTML(html=doc)
>>> html.links
{'https://www.baidu.com'}
# 和上面一段代碼接起來
>>> script = """
() => {
return {
width: document.documentElement.clientWidth,
height: document.documentElement.clientHeight,
deviceScaleFactor: window.devicePixelRatio,
}
}
"""
>>> val = html.render(script=script, reload=False) # render()方法 后面會講
>>> print(val)
{'width': 800, 'height': 600, 'deviceScaleFactor': 1}
>>> print(html.html)
<html><head></head><body><a href="https://www.baidu.com"></a></body></html>
>>> r = session.get('http://python-requests.org/')
>>> r.html.render()
[W:pyppeteer.chromium_downloader] start chromium download.
Download may take a few minutes.
[W:pyppeteer.chromium_downloader] chromium download done.
[W:pyppeteer.chromium_downloader] chromium extracted to: C:\Users\xxxx\.pyppeteer\local-chromium\571375
>>> r.html.search('Python 2 will retire in only {months} months!')['months']
'<time>25</time>'
def render(self, retries: int = 8, script: str = None, wait: float = 0.2, scrolldown=False, sleep: int = 0, reload: bool = True, timeout: Union[float, int] = 8.0, keep_page: bool = False):
- retries: 加載頁面失敗的次數(shù)
- script: 頁面上需要執(zhí)行的JS腳本(可選)
- wait: 加載頁面前等待的時間(秒),防止超時(可選)
- scrolldown: 頁面向下滾動的次數(shù)(整數(shù))
- sleep: 在頁面初次渲染之后的等待時間
- reload: 如果為False,那么頁面不會從瀏覽器中加載,而是從內(nèi)存中加載,只有設(shè)置為True才會在瀏覽器中渲染JS
- keep_page: 如果為True,允許您使用 r.html.page 訪問瀏覽器頁面
def next(self, fetch: bool = False, next_symbol: _NextSymbol = DEFAULT_NEXT_SYMBOL) -> _Next:
fetch: 一個布爾型參數(shù),默認(rèn)為False:直接返回下一頁的 url地址;
如果設(shè)置為True:則直接返回下一頁的 HTML對象
DEFAULT_NEXT_SYMBOL = ['next', 'more', 'older']
# next()方法
def next(self, fetch: bool = False, next_symbol: _NextSymbol = DEFAULT_NEXT_SYMBOL) -> _Next:
"""Attempts to find the next page, if there is one. If ``fetch``
is ``True`` (default), returns :class:`HTML <HTML>` object of
next page. If ``fetch`` is ``False``, simply returns the next URL.
"""
def get_next():
candidates = self.find('a', containing=next_symbol) # 尋找 包含字段'next', 'more', 'older' 的a標(biāo)簽
def __init__(self, loop=None, workers=None, mock_browser: bool = True, *args, **kwargs):
loop: 使用的Asyncio循環(huán)。
workers: 用于執(zhí)行異步調(diào)用的線程數(shù)量。如果不傳遞,它將默認(rèn)為電腦處理器數(shù)量乘以5
>>> async def get_pyclock():
... r = await asession.get('https://pythonclock.org/')
... await r.html.arender()
... return r
...
>>> results = asession.run(get_pyclock, get_pyclock, get_pyclock) # 這里作者將同一個頁面使用異步方式進(jìn)行了3次渲染,但是實際上使用的時間并不是平時的3倍!可能只是比平時渲染一個頁面多花了一點(diǎn)時間而已!這就是異步的好處!
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# @Author : xiao qiang
# @WeChat : xiaoqiangclub
# @Software : PyCharm
# @File : test002.py
# @Time : 2021/5/30 19:48
from requests_html import AsyncHTMLSession
aSession = AsyncHTMLSession()
async def test(tt, yy):
r = await aSession.get('https://www.baidu.com/')
await r.html.arender()
print('-{}-{}-'.format(tt, yy))
return r
ret1 = aSession.run(lambda: test('1', 'a'))
ret2 = aSession.run(lambda: test('2', 'b'))
ret3 = aSession.run(lambda: test('3', 'c'))
print(ret1)
print(ret2)
print(ret3)
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# @Author : xiao qiang
# @WeChat : xiaoqiangclub
# @Software : PyCharm
# @File : test002.py
# @Time : 2021/5/30 19:48
from requests_html import AsyncHTMLSession
aSession=AsyncHTMLSession()
async def test(tt, yy):
r=await aSession.get('https://www.baidu.com/')
await r.html.arender()
print('-{}-{}-'.format(tt, yy))
return r
# ret1=aSession.run(lambda: test('1', 'a'))
# ret2=aSession.run(lambda: test('2', 'b'))
# ret3=aSession.run(lambda: test('3', 'c'))
# print(ret1)
# print(ret2)
# print(ret3)
#
test_dict={
'1': 'a',
'2': 'b',
'3': 'c'
}
tasks=[lambda i=i, y=y: test(i, y) for i, y in
test_dict.items()] # lambda傳參誤區(qū)參考文章:https://www.jianshu.com/p/58ebd1618556
ret=aSession.run(*tasks) # 注意前面有個 *,不可少!# 參考文章:https://www.jianshu.com/p/58ebd1618556
print(ret)
>>> from requests_html import AsyncHTMLSession
>>> asession = AsyncHTMLSession()
>>> async def get_pythonorg():
... r = await asession.get('https://python.org/')
... return r
...
>>> async def get_reddit():
... r = await asession.get('https://reddit.com/')
... return r
...
>>> async def get_google():
... r = await asession.get('https://google.com/')
... return r
...
>>> results = asession.run(get_pythonorg, get_reddit, get_google)
>>> results # check the requests all returned a 200 (success) code
[<Response [200]>, <Response [200]>, <Response [200]>]
>>> # Each item in the results list is a response object and can be interacted with as such
>>> for result in results:
... print(result.html.url)
...
https://www.python.org/
https://www.google.com/
https://www.reddit.com/
from requests_html import HTMLSession, HTML, AsyncHTMLSession
from pprint import pprint
class DouBanTest:
def __init__(self):
self.start_url = 'https://movie.douban.com/chart' # 豆瓣電影排行榜url
self.js_url = 'https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=0'
self.session = HTMLSession() # 實例化session
self.aSession = AsyncHTMLSession() # 實例化異步session
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'
}
def get_response(self, url):
"""獲取響應(yīng),并返回requests_html中的HTML對象"""
r = self.session.get(url, headers=self.headers)
# print(r)
return r.html
# 快速獲取頁面中的url
def fast_get_urls(self):
"""快速獲取頁面中的url"""
html = self.get_response(self.start_url)
# HTML的 links屬性 可以快速獲取到頁面中 a標(biāo)簽中的href屬性
urls = html.links
# pprint(urls)
# HTML的 absolute_links屬性 可以快速獲取到頁面中 a標(biāo)簽中的href屬性,并返回絕對url地址
absolute_urls = html.absolute_links
pprint(absolute_urls)
# 清洗數(shù)據(jù)(提取數(shù)據(jù))
def get_data_by_xpath(self):
"""使用xpath獲取數(shù)據(jù)"""
html = self.get_response(self.start_url)
a_list = html.xpath('//table//div/a')
# pprint(a_list)
# 提取它的標(biāo)題和url
movies_info = dict()
for a in a_list:
title = a.text # 獲取標(biāo)題(文本)
# print(title)
movie_url = a.attrs.get('href') # 使用 attrs 來解析element元素,并獲得一個字典
# print(movie_url)
# print('-----')
movies_info[title] = movie_url
pprint(movies_info)
# 清洗數(shù)據(jù)(提取數(shù)據(jù))
def get_data_by_css(self):
"""使用css獲取數(shù)據(jù)"""
html = self.get_response(self.start_url)
a_list = html.find('tr[class="item"] div a') # 參考 css選擇器 語法
# pprint(a_list)
# 提取它的標(biāo)題和url
movies_info = dict()
for a in a_list:
title = a.text # 獲取標(biāo)題(文本)
# print(title)
movie_url = a.attrs.get('href') # 使用 attrs 來解析element元素,并獲得一個字典
# print(movie_url)
# print('-----')
movies_info[title] = movie_url
pprint(movies_info)
# 清洗數(shù)據(jù)(提取數(shù)據(jù))
def get_data_by_re(self):
"""使用css獲取數(shù)據(jù)"""
html = self.get_response(self.start_url)
# search() 獲取第一條匹配的數(shù)據(jù)
# first_url = html.search('a href="{}"') # 參數(shù)可以參考正則,獲取第一條匹配的數(shù)據(jù)
# pprint(first_url)
# search_all() 獲取所有滿足條件的數(shù)據(jù)列表
# url_list = html.search_all('a h{}f="{}"')
url_list = html.search_all('a h{title}f="{url}"') # 對取值方式進(jìn)行命名,返回一個列表
# pprint(url_list)
#
# 提取數(shù)據(jù)
for url in url_list:
print(url)
print(url['title']) # 使用 result[name] 進(jìn)行取值
print(url['url'])
# print(url[0])
# print(url[1])
print('----------')
# HTML類
def use_HTML(self):
"""使用HTML模塊處理文檔"""
html_str = '<a class="nbg" href="https://movie.douban.com/subject/3099221/" title="活死人軍團(tuán)">'
html = HTML(html=html_str)
# links
print(html.links)
# search()
print(html.search('href="{}"'))
# 加載JS頁面
def load_js(self):
html = self.get_response(self.js_url)
# 使用一個 render()方法 來加載js(實際上使用這個pyppeteer)
# html.render(wait=3) # js加載
print(html.html)
async def send_requests_ues_async(self, url):
"""發(fā)送異步請求"""
"""獲取響應(yīng),并返回requests_html中的HTML對象"""
r = await self.aSession.get(url, headers=self.headers)
# print(r)
return r.html
def get_response_by_async(self):
url_list = [
'https://www.baidu.com',
'https://www.qq.com',
'https://www.163.com',
]
tasks = [lambda url=url: self.send_requests_ues_async(url) for url in url_list]
ret = self.aSession.run(*tasks) # 返回的是一個HTML對象列表
# print(ret)
# print(ret[0].html)
for html in ret:
print(html)
async def load_js_use_async(self, url):
"""異步加載js"""
html = await self.send_requests_ues_async(url)
# 異步加載js
await html.arender()
return html
def get_js_by_async(self):
# ret = self.aSession.run(self.load_js_use_async)
#
# print(ret[0].html)
url_list = [
'https://www.baidu.com',
'https://www.qq.com',
'https://www.163.com',
]
tasks = [lambda url=url: self.load_js_use_async(url) for url in url_list]
ret = self.aSession.run(*tasks) # 返回的是一個HTML對象列表
# print(ret)
# print(ret[0].html)
for html in ret:
print(html)
if __name__ == '__main__':
test = DouBanTest()
# test.get_data_by_xpath()
# test.get_data_by_css()
# test.fast_get_urls()
# test.get_data_by_re()
# test.use_HTML()
# test.load_js()
# test.get_response_by_async()
test.get_js_by_async()
【本文由 "XiaoqiangClub" 發(fā)布,2021年6月17日】
所以放著《信號》遲遲沒有安利,是因為這個劇的片源一直不穩(wěn)定,這么緊湊燒腦欲罷不能的神劇,追到一半后面的資源看不了了的那種煎熬感,簡直是抓心撓肝。
現(xiàn)在騰訊視頻居然火速出了高質(zhì)量正版了,終于是安利的最佳時刻了!!
友情提示:對《信號》來說,任何不一口氣從頭追到尾的看劇方式都是耍!流!氓!
(所以我們周五晚上才發(fā)這個,周末刷起來吧,hiahia)
《信號》引起我的注意的時候還只有一千多人打分,現(xiàn)在評價人數(shù)翻了十倍,分?jǐn)?shù)一直堅挺保持在9.2,領(lǐng)先同期的《太陽的后裔》一個身位都不止。
又是一部看上去沒什么大熟臉明星卡司,但是一但陷進(jìn)去就無法掙脫的劇集,三大主演李帝勛、金惠秀、趙震雄都是演技派,我不會告訴你現(xiàn)在最右邊的微胖滄桑大叔是我的夢中情人:
前有1988的一眾丑男俘獲萬千少女心,后有信號里臉輸配角一萬倍的兩大糙漢靠人設(shè)帥炸全宇宙,tvN你這么肆意操控我們的審美是不是很爽?!
《信號》的好看,很難用一兩句話就說清楚。
雖然就是一部16集每集1小時左右的正常體量的韓劇而已,但是相比以往幾乎所有在中國大紅過的韓劇來說,它都豐富得多——形式感上有刑偵、懸疑、穿越;大格局包含了個人選擇、家國命運(yùn)、蝴蝶效應(yīng);感情上有愛情、親情、對小人物的悲憫......
一部劇包含這么多元素不難,難的是隨著劇情的鋪墊強(qiáng)化,每一部分都漸入佳境,完成得很圓滿:用了平行時空的設(shè)定但是沒有明顯的爛尾和bug,出場人物很多但是每個都立體豐滿。16集看下來幾乎沒有一個廢鏡頭,沒有一處閑筆,每一集都是電影級別的質(zhì)感。
唯一的缺點(diǎn)是第一集的前半個小時有點(diǎn)難進(jìn)入,看起來不明就里,實在是因為編劇腦洞太大,開篇要交代的東西太多。
但是請答應(yīng)我,一定要堅持住!
熬過這半小時,看懂了基本設(shè)定,你會被一股神秘力量帶領(lǐng)著一集一集刷下去根本停不下來!而且開篇的每一個細(xì)節(jié)都要看仔細(xì),看到后面會無數(shù)次想用小岳岳臉驚呼,我的天吶,原來前面早有暗示!
那種跟著編劇把記憶里星星點(diǎn)點(diǎn)的小懷疑一點(diǎn)點(diǎn)串聯(lián)成一張網(wǎng),在某個瞬間一下想通謎底的愉悅感,酣暢淋漓。
為了能方便說清楚《信號》好看在哪,我要把《信號》拆解成三個部分:
首先是破案。
《信號》最主要的一條線索,是年輕刑警樸海英撿到一個對講機(jī),從而和十多年前的前輩李材韓開始跨越時空的聯(lián)系,兩個人聯(lián)手一起解決多年來懸而未決的案件。
這些案件每個都不簡單。
比如說開篇引入的「金允貞誘拐案」:
樸海英小時候無意中目睹了同學(xué)金允貞被一個打扮艷麗的女人誘拐。很快這件涉及女學(xué)生的綁架案變成全社會的焦點(diǎn),所有已知的證據(jù)都指向一個年輕男子,幼小的樸海英到警察局提供線索,但是一個小屁孩說的話根本沒人在意。
因為警察被高智商罪犯戲耍,追查方向一開始就錯了,「金允貞誘拐案」變成一樁懸案,直接懸了15年。
眼看訴訟時效還剩下三天,警方顯然依舊沒有(也怕麻煩不太想有)什么進(jìn)展。
15年后,樸海英警校畢業(yè),但是因為對警察的不信任,變成了一個利用刑偵能力追蹤明星賣緋聞的混子。在一次調(diào)查明星被警察盯上帶回警局調(diào)查的時候,他在警察局門口意外撿到一個沒有電池的老式對講機(jī)。
對講機(jī)里短暫的信號,告訴了他關(guān)于「金允貞誘拐案」的一個關(guān)鍵線索,勾起了他十多年前的回憶。
他利用這個線索和自己強(qiáng)大的心理分析能力,很快鎖定了真正的犯罪嫌疑的人特征,但是這時候距離「金允貞誘拐案」的訴訟時效中止,已經(jīng)只剩下一個半小時。
罪犯通過新聞知道了警察追查的進(jìn)展,但是心理極度自信的她決定繼續(xù)戲耍警察——畢竟一個半小時之后,訴訟時效一過,就是知道她就是真兇,也沒有人能動她一分一毫了。
真正緊張的地方從這里開始,這一個半小時簡直過得比一年還漫長:
知道了犯罪分子的特征,但是被她誤導(dǎo)追查了錯誤的人→→意識到被誤導(dǎo)之后,真正的罪犯已經(jīng)藏身→→找到她的藏身地點(diǎn)把她羈押,又沒等到化驗結(jié)果出來用證據(jù)蓋章她就是罪犯→→試圖在最后幾分鐘用心理戰(zhàn)攻破她的防線讓她認(rèn)罪,但是她偏偏軟硬不吃比警察想得更強(qiáng)大。
還剩幾分鐘了啊!
審訊室外面,是金允貞母親蒼老的臉:
15年來她只能每天站在路口舉個牌子,呼吁大家不要忘了她女兒。
是韓國全社會對15年毫無進(jìn)展的案件的關(guān)注。
是來自警察局領(lǐng)導(dǎo)的仇恨臉:馬上就要過訴訟時效的案子讓它安靜過去就行了干嘛要鬧出這么大的幺蛾子打我的臉!!!
千鈞一發(fā),按照以往我們熟悉的“最后一分鐘營救”的經(jīng)典套路,警察總是要在時間耗盡前最后一秒鐘把罪犯繩之以法的,但這次并沒有——
警察敗了,束手無策。
編劇就是要觀眾和內(nèi)心有責(zé)任感的主人公一起承受這種挫敗感。只有這樣,大家才能對「訴訟時效」制度給被害人家屬帶來的傷害有那么幾分感同身受。
這正是《信號》的格局所在。
當(dāng)然這還不是這個案件的最終結(jié)果,后面還有反轉(zhuǎn),我就不劇透了。
韓國的影視劇多次對「訴訟時效」制度是否合理做出過探討。《信號》這次重提這個話題,也有特別的意義——在真實的韓國社會,原本殺人罪的訴訟時效是15年,2007年延長為25年。2015年7月24日,韓國國會通過刑事訴訟法修正案,正式廢除了殺人罪的公訴時效。
一個又一個電影電視劇不遺余力參與社會議題,引起民眾的關(guān)心和思考,積累起輿論的力量就可以改變國家。那種和主角一起經(jīng)歷一場高潮迭起絕處逢生的偵破過程,最后改變了法律制的體驗,真的好燃!
接下來《信號》里每一個案件都無一例外有社會原型,并且現(xiàn)實意義被挖掘的越來越深。
京畿南部連環(huán)殺人案的原型是華城連環(huán)殺人案,在現(xiàn)實里至今是懸案。電影《殺人回憶》和tvN早先的電視劇《岬童夷》都改編自這個案件。《信號》是tvn第二次利用這個題材——
1986年至1991年間,韓國京畿道華城市太安鎮(zhèn)一帶,有10名女性依次被用殘忍的手法殺害,殺人犯始終未被捕,最終成為未解決的殺人事件。
這起案子是韓國人心中的一根刺,殺人手法惡劣,投入警力眾多,連犯罪者的畫像都有,但就是抓不到人。這根刺不斷被翻出來演繹,一次又一次提醒國人正義還沒有來到,我們還沒有放棄。
如果說前兩個案子還主要集中在對社會制度的討論,那么后面這幾個就已經(jīng)開始不遺余力地對公務(wù)階層開黑了。
第三個案子申汝珍綁架案,犯罪者和被綁架的女生都是一次大橋坍塌事故的受害者。這個事故的原型是圣水大橋坍塌事件——一座剛建好的大橋因為施工腐敗轟然倒塌。
《信號》里,坍塌事故有兩個受害女學(xué)生,一個因為家里的權(quán)勢得救,另一個只能在父親的呼喊聲里死去。
在這個案子里,鏡頭帶過一下大橋坍塌事故的紀(jì)念碑,寫著永遠(yuǎn)銘記遇難者:
諷刺得是,就在這座紀(jì)念碑前,15年過去,兩個受害者家庭依舊因為當(dāng)初誰應(yīng)該獲救而糾纏,衍生出綁架案甚至還有人因此喪命。
對受害者來說,家人去世了就是去世了,悲劇從來沒有過去。但是對于參與貪腐的官員和生意人,一塊紀(jì)念碑就足以遮掩一切。
看到這兒,我對《信號》針砭時弊的尺度已經(jīng)深深拜服了。
接下來的大盜案件、仁州女高中生案件無一例外涉及權(quán)貴階層和警察系統(tǒng)互相勾結(jié),黑幕深不見底。
而且,申汝珍綁架案的犯罪者是大盜案件的受害者,仁州女高中生案件更是把所有主角全部串聯(lián)在了一起。
一環(huán)一環(huán)緊緊相扣,因果相關(guān),16集連著看下來沒有一絲喘息的時間。
------------------
接下來說平行時空的設(shè)定。
《信號》緊湊的懸念,一部分來自于涉及的案件本身之復(fù)雜,另一部分是靠對講機(jī)實現(xiàn)的跨越時空的聯(lián)系。
這個設(shè)定已經(jīng)不新鮮了,美劇、港劇都有先例。
《信號》好在沒有讓這個對講機(jī)成為兩個主角的外掛,從此所向披靡,而是讓它帶來很多禍患:
身處過去的李材韓依靠幾十年后的信息源,改變著過去,但是過去被改變,現(xiàn)在也隨之改變。這就像潘多拉的魔盒,一旦開始,沒人知道會發(fā)生什么。
在京畿南部連環(huán)殺人案里,他們合力救下了一個被害者,但是這個舉動15年后卻造成另外一個無辜的人被殺死。所以利用對講機(jī)救人是對是錯?
即便連通古今,李材韓和樸海英都不是全知,樸海英被誤導(dǎo)提供給李材韓錯誤的信息,造成無辜的人被冤枉,15年后釀成了更大的慘劇。誰該為這樣的慘劇負(fù)責(zé)?
所以他們倆都曾經(jīng)動搖過,一度斷了聯(lián)系。
但是最終,還是選擇直面問題,聯(lián)手對抗。
因為只有堅決對抗到絆倒黑幕源頭的人,把真正的錯誤糾正了,才能徹底改變過去,繼而改變未來。
對講機(jī)的存在,也一度把李材韓推到悲劇人物的境地。
查案查到最后,樸海英知道李材韓會在查案過程里死去。但就是這次死前,他聯(lián)通了和樸海英聯(lián)絡(luò)的對講機(jī),給樸海英提供了第一個線索。
樸海英該阻止李材韓,保護(hù)他不被殺死嗎?
如果阻止了過去里的他死去,現(xiàn)在的他就能保全嗎?
他查了一半的案子怎么辦,就此放棄了嗎?
這些懸念和兩難的抉擇推動劇情,在兩個男主角的關(guān)系之間形成巨大的張力。
------------------
至于感情線,曾經(jīng)被《請回答1988》的觸動人,就一定會感受到《信號》的用心。
韓劇編劇的可怕之處在于,對于人性的細(xì)節(jié)的洞察。給每個人物,哪怕是支線里的小人物,都安排了很多前因后果的細(xì)節(jié),慢慢鋪陳,拼湊成一個個立體又可愛的普通人,一點(diǎn)點(diǎn)擊中你。
比如硬漢刑警李材韓,他不是高大全的英雄,他也會哭,也會懷疑,有很多時候無能為力,看著自己的初戀女友在自己面前死去,明知道罪犯是誰又沒法抓捕......
但是他永遠(yuǎn)有正義感——真正的正義感,不是無知無畏,是明知道自己內(nèi)心也有恐懼,知道自己可能神仙危險,但是依然選擇忠于內(nèi)心的信念:
有同理心,每個受害者,對他來說都不是幾張照片幾個關(guān)鍵詞,而是一個個活生生的人:
不放棄,哪怕用一己之力對抗全世界,也不放棄:
就是這么一個平凡到就在你我身邊的糙漢,但誰又能說他不是英雄呢?每次他孤身一人出發(fā)去查案的時候,雖然就穿個破夾克邋邋遢遢的,但是正義和勇氣的光環(huán)讓他帥炸了!
李材韓的初戀女友是一個案件的受害者,受害之前,買了兩張電影票本打算邀請李材韓一起看。
在初戀女友遇害之后,李材韓獨(dú)自一個人來看電影,一個喜劇片,只有他身邊的座位空著,周圍全是笑聲,沒人懂他為什么哭成傻逼:
過了很多年之后,暗戀他的女刑警車秀賢在圣誕節(jié)請他看電影,他笑笑說:“我從來不看電影的。”
天哪!這云淡風(fēng)輕的一句話,對觀眾來說簡直是暴擊!他從來沒有放下過心里的傷痛,一個看起來不解風(fēng)情的硬漢心里那點(diǎn)柔情,多么動人啊!
還有女一號車秀賢,一路從一個什么都不知道的傻妹:
眼神里都是純真:
李材韓受傷,女漢子車秀賢在救護(hù)車上笨拙地哭著和李材韓表白,看得我又哭又笑,少女心炸裂:
后來他進(jìn)化成干練的女刑警隊長,一個人扛下所有壓力,所謂愛一個人就是把自己活成他,這時候的車秀賢,已經(jīng)是另一個李材韓。
追尋李材韓蹤跡的十五年,沒人知道她內(nèi)心經(jīng)歷了多少失望、難過、寂寞,直到發(fā)現(xiàn)李材韓的尸骨,才終于哭出來:
這里要表白飾演車秀賢的金惠秀,她已經(jīng)46歲了,演出女主角二十多歲的少女眼神依然毫無違和感,不愧是韓國頂級電影咖。
之前提到過每個配角都比兩個男主角帥不是瞎說,有圖為證。
《信號》里的殺人犯長這樣:
跋扈富二代長這樣:
男主角被人冤枉入獄的哥哥長這樣:
另外還有滿嘴牢騷關(guān)鍵時刻覺不掉鏈子的逗逼同事:
亦正亦邪背負(fù)著一身秘密,最后變成關(guān)鍵性線索人物的科長:
每個人物身上都背負(fù)著好幾重反轉(zhuǎn),再說下去就沒完了,所有懸念等你看劇的時候慢慢發(fā)現(xiàn)!
總之,《信號》刑偵線、平行時空線、感情線,這三條線交織,看片體驗就是:緊張、害怕、搞笑又感動。
同樣的題材,給美劇可能拍成《24小時》,給港劇會拍成《隔世追兇》,國產(chǎn)劇這不能拍那拍不出來的,最后變成警察們談戀愛,韓國人就綜合各家之長,既有美劇的多線敘事,又有港劇的職場氛圍,還不失韓劇本身的人情味,拍出一個可看性、深度、情感都兼顧得很好的劇。
當(dāng)《信號》以口碑逆襲,在劇迷內(nèi)部造成轟動效應(yīng)之后,騰訊視頻立刻就跟進(jìn)買了正版全集,足見其實力。
如果說《太陽的后裔》還只是偶像劇領(lǐng)域的小超越,《信號》就是從創(chuàng)作環(huán)境到編劇能力、演員表演水準(zhǔn)、對待觀眾的態(tài)度的全面碾壓。
在整個影視產(chǎn)業(yè),我們都被甩得太遠(yuǎn)了。
正版全集《信號》觀看傳送門
http://film.qq.com/cover/v/vkf8hhfj7uunkg6.html#rd
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。