jmcomic2.mic.bit(JMCOMIC2.MIC.)


本站AI自動判斷提供您所需要的app下載:點我下載安裝,你懂的APP

英語國家的孩子,記單詞不是靠“背”,而是靠“拼讀”,這就是所謂的“自然拼讀”法,又稱“英語自然拼讀法”。Phonics也叫自然拼讀,就是把幾個英文字母組合成一個詞根,然后這個詞根有固定的發音規律。分享一下在美國很流行的自然拼讀學習動畫,讓孩子邊玩邊學習。

Between the Lions 我們一家都是獅

觀看地址:
http://www.lxwc.com.cn/video-1235328-yk129625.html

《我們一家都是獅》每集里都有動畫、布偶、真人并配以歌曲和活動變化的英文字卡,讓孩子在熱鬧開心的氣氛下,掌握準確的發音,并找到閱讀的竅門和增加學英語的興趣。

節目主要的目的就是在教導學齡前兒童 Phonics(自然拼音),即不透過音標,直接由字母讀音,以及培養兒童閱讀興趣,也能夠獲取進入小學前所需的常識與技能,同時提供家長在教養以及親子教育方面的技巧指引。

這個系列曾經7次獲得艾美獎,是閱讀引導主題中廣受好評的經典動畫片。每集26分鐘左右,適合3歲以上開始學閱讀的孩子。

Alphablocks積木英語

觀看地址:

http://v.baidu.com/comic/13347.htm?fr=open_bdps&video_uri=comic.basic.002163.1415699453.0

每個Alphablock都是故事里面的人物角色,這些Alphablocks通過不同的組合給孩子們展示了一次又一次生動有趣的words magic。除了第一集是字母總體介紹,其他每集都介紹一個字母的常見發音及如何組合元音和輔音進行自然拼讀。

Super Why好奇超人

觀看地址:
http://list.youku.com/albumlist/show?id=2386700&ascending=1&page=1

美國名牌兒童英語節目《SuperWhy》是針對3~6歲兒童設計的, 每集24分鐘,故事發生在一個叫“故事書”的村莊里。在每一集里,神奇主人公們都會使用渾身法寶,帶領孩子們去體驗閱讀探險:認識字母、理解詞意、學習拼讀、記憶詞匯和閱讀理解等。

更好玩的是,好奇超人還會利用“法術”讓每天的故事情節發生變化,并出現新的結局。比如,他可以把大野狼變成小乖狼。是不是很有趣啊!

Meet the Letters遇見字母

觀看地址:
http://www.iqiyi.com/w_19rs2rx5y1.html

這部比較適合幼兒和學齡前兒童觀看學習,簡潔的畫面以及高大上的教程提示具有神奇的洗腦作用:黑白鮮明的字母,反復變調的朗讀,每一封信都被顯示并命名了好幾次,而且每一封信的動畫都給孩子們提供了一些有趣的記憶線索。會讓小寶寶專心學習,不想記住都很難!!

Leap Frog Letter Factory 跳跳蛙:字母工廠

觀看地址:
HTTP://WWW.LXWC.COM.CN/VIDEO-1235303-YK128771.HTML

青蛙小弟Tad因為年紀太小還不認識字母,不能和家人一起去給爸爸組織的活動幫忙。正在失望之際,Quigley博士出現啦,博士帶他去了一個工廠,工廠內有從A到Z的26個字母車間,每個車間都帶著各個字母的特色。

動畫片以音樂劇的形式傳遞字母發音知識,小朋友在熱情洋溢中學習發音。另外還附帶了字母游戲以供練習,非常有趣喲。

Word World單詞世界

觀看地址:
HTTP://V.YOUKU.COM/V_SHOW/ID_XNZMXMZQWMDEY.HTML?FROM=S1.8-1-1.2&SPM=A2H0K.8191407.0.0

美國電視臺播放給4-6歲孩子學習單詞的動畫,也適合大人學習英語使用。

畫面中的所有小動物和物品都是由單詞組成的。比如“小蟋蟀”的英文是cricket,所以主角蟋蟀就是完全由這個單詞組成,非常有創意。這部動畫片期望能給學齡前孩子創造一個良好的英語環境,進行認讀和拼讀的啟蒙。

Phonics Kids拼讀小孩

觀看地址:搜狐視頻、愛奇藝、優酷、土豆、騰訊視頻搜索“Phonics Kids”可直接觀看

這部動畫針對初學英語,即將要開始學習字母拼讀的孩子而設計的自然拼讀動畫。以韻文歌謠及豐富的圖像貫穿,輕輕松松認識字母,以活潑可愛的音樂帶出童趣的動畫、歌謠,讓孩子在潛移默化中學得更扎實。

Kids ABC 寶寶ABC

觀看地址:http://www.dwz.cn/5jrYJm

KidsABC是日本制作出版的一套學習Phonics自然拼讀法的啟蒙動畫教程,是真人+動畫的展示形式。跟BBCCbeebies的phonics自然拼讀動畫片《Alphablocks》的功能差不多,都是進行Phonics自然拼讀意識啟蒙的,兩個可以同時看,不沖突。

一共24集,每集一個主題,配以真人版的圍繞日常用語進行的故事、以動畫形式展示的兒歌和以動畫展示的自然拼讀啟蒙內容。

Hooked on Phonics迷上自然拼讀

HTTP://V.YOUKU.COM/V_SHOW/ID_XODIZNTG3ODC2.HTML?FROM=S1.8-1-1.2&SPM=A2H0K.8191407.0.0

在美國己經有20年歷史的Hooked on Phonics一直是老師、家長以及孩子們的最愛。每集視頻通過單詞展示+朗讀+跟讀的形式介紹一個尾音組合,只是前面的輔音發生變化。

動畫秉承多種感官并用原則,使得整個學習的內容充滿趣味性和互動性,小朋友在每日的學習中不覺沉悶,在完全輕松及愉快的氣氛逐步提升英語的朗讀和閱讀能力。

Abadas 可愛動物

觀看地址:
HTTP://WWW.IQIYI.COM/W_19RTBI44O5.HTML

這部是BBC2015年初的新作,特別適合作為孩子學習自然拼讀之后拓展詞匯。這個系列一共52集,每集約11分鐘,每集的開頭都是一個叫Ben的小男孩,翻開一本神奇的書,書里會出現一只小河馬,一只小狐貍和一只小蝙蝠,每一集三個小動物都有新的冒險,書的結尾還是Ben合上這本神奇的書。

除了開頭和結尾有真人小朋友出現外,中間的部分都是動畫,動畫顏色鮮艷,全程童音。

前言

本文的文字及圖片來源于網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯系我們以作處理。

作者:merlin&

操作環境

編譯器:pycharm社區版

python 版本:anaconda python3.7.4

瀏覽器選擇:Google瀏覽器

需要用到的第三方模塊:requests , lxml , selenium , time , bs4,os

網頁分析

明確目標

首先我們打開騰訊動漫首頁,分析要抓取的目標漫畫。找到騰訊動漫的漫畫目錄頁,簡單看了一下目錄,發現全站的漫畫數量超過了三千部(感覺就是爬下來也會把內存撐爆)

于是我覺得爬取首頁的推薦漫畫會是一個比較好的選擇(爬取全站漫畫只需要稍稍改一下網址構造就可以做到了)

提取漫畫地址

選定了對象之后,就應該想辦法來搞到漫畫的地址了右擊檢查元素,粗略看一遍網頁的源代碼,這時我發現里面有很多連續的

標簽,我猜測每部漫畫的地址信息就存儲在這些標簽里面

隨便打開一個《li》標簽,點擊里面包裹的鏈接地址會跳轉到一個新的網頁,這個網頁正是我想要找的漫畫地址,可以見得我的猜測是正確的,等到實際操作的時候再用表達式提取信息就非常容易了

提取漫畫章節地址

進入漫畫的目錄頁,發現一頁最多可以展示20章的漫畫目錄,要想更換顯示還需要點擊章節名上面的選項卡來顯示其他章節的地址

接下來就需要我們來檢查網頁元素想辦法來獲取章節地址了,同樣右擊檢查元素在看到了源代碼后,我發現了一個非常驚喜的事情,這個源碼里面包含著所有的章節鏈接,而不是通過動態加載來展示的,這就省去了我們提取其他章節鏈接的功夫,只需要花心思提取漫畫圖片就可以了

這里每個《p》標簽下包含了五個《a》標簽,每個《li》標簽下包含了四個《p》標簽,而每個漫畫的鏈接就存在每個《a》標簽中,可以輕松通過語法來提取到每頁的鏈接信息

提取漫畫圖片

怎么將漫畫的圖片地址提取出來并保存到本地,這是這個代碼的難點和核心先是打開漫畫,這個漫畫頁應該是被加上了某些措施,所以它沒辦法使用右鍵查看網頁源代碼,但是使用快捷鍵[ctrl + shift +i]是可以看到的

按下[ctrl + shift + i],檢查元素

通過第一次檢查,可以發現網頁的元素中只有前幾張圖片的地址信息,后面的信息都為后綴.gif的文件表示,這些gif文件就是圖片的加載動畫

接著向下滑動到底部,等待圖片全部顯示出來再次檢查元素

現在所有的漫畫圖片全部顯示出來,下方并無.gif 的文件,由此可知,騰訊動漫是以js異步加載來顯示圖片的,要想獲取頁面的全部圖片,就必須要滑動滾動條,將全部的圖片加載完成再進行提取,這里我選擇selenium模塊和chromedriver來幫助我完成這些操作。下面開始進行代碼的編寫。

編寫代碼

導入需要的模塊

import requests from lxml import etree from selenium import webdriver #selenium模擬操作 from time import sleep from bs4 import BeautifulSoup from selenium.webdriver.chrome.options import Options #谷歌無頭瀏覽器 import os

獲取漫畫地址

這里我使用的是xpath提取漫畫地址信息,在谷歌瀏覽器中使用xpath helper插件輔助編寫xpath表達式

#打開騰訊動漫首頁 url = 'https://ac.qq.com/' #給網頁發送請求 data = requests.get(url).text #將網頁信息轉換成xpath可識別的類型 html = etree.HTML(data) #提取到每個漫畫的目錄頁地址 comic_list = html.xpath('//a[@class="in-rank-name"]/@href') print(comic_list)

print一下輸出的comic_list,提取成功

提取漫畫的內容頁

內容頁的提取也很簡單,就像上面的分析一樣,使用簡單的xpath語法即可提取

然后我們再將漫畫的名字提取出來,方便為保存的文件夾命名

#遍歷提取到的信息 for comic in comic_list: #拼接成為漫畫目錄頁的網址 comic_url = url + str(comic) #從漫畫目錄頁提取信息 url_data = requests.get(comic_url).text #準備用xpath語法提取信息 data_comic = etree.HTML(url_data) #提取漫畫名--text()為提取文本內容 name_comic = data_comic.xpath("http://h2[@class='works-intro-title ui-left']/strong/text()") #提取該漫畫每一頁的地址 item_list = data_comic.xpath("http://span[@class='works-chapter-item']/a/@href") print(name_comic) print(item_list)

print打印的信息:

提取章節名

剛剛我們輸出的是漫畫頁的地址字段,但是通過這些字段并不能請求到信息,還需在前面加上域名才可以構成一個完整的網址提取章節名是為了在漫畫名的文件夾下再為每個章節創建一個文件夾保存漫畫圖片

for item in item_list: #拼接每一章節的地址 item_url = url + str(item) #print(item_url) #請求每一章節的信息 page_mes = requests.get(item_url).text #準備使用xpath提取內容 page_ming = etree.HTML(page_mes) #提取章節名 page_name = page_ming.xpath('//span[@class="title-comicHeading"]/text()') print(page_name)

打印章節名:

獲取漫畫源網頁代碼

這個部分的代碼是這個代碼的核心部分,也是花費時間最久的部分首先我們知道通過正常的方式沒有辦法請求到所有的圖片地址信息,若是使用抓包方法會變得非常難分析,所以我采用的是模擬瀏覽器滑動的方法來獲得圖片的地址信息為了方便看到結果,先將webdriver設置為有界面模式,等到實現想要的功能之后,再將它隱藏起來

#webdriver位置 path = r'/home/jmhao/chromedriver' #瀏覽器參數設置 browser = webdriver.Chrome(executable_path=path) #開始請求第一個章節的網址 browser.get(item_url) #設置延時,為后續做緩沖 sleep(2) #嘗試執行下列代碼 try: #設置自動下滑滾動條操作 for i in range(1, 100): #滑動距離設置 js = 'var q=document.getElementById("mainView").scrollTop = ' + str(i * 1000) #執行滑動選項 browser.execute_script(js) #延時,使圖片充分加載 sleep(2) sleep(2) #將打開的界面截圖保存,證明無界面瀏覽器確實打開了網頁 browser.get_screenshot_as_file(str(page_name) + ".png") #獲取當前頁面源碼 data = browser.page_source #在當前文件夾下創建html文件,并將網頁源碼寫入 fh = open("dongman.html", "w", encoding="utf-8") #寫入操作 fh.write(data) #關掉瀏覽器 fh.close() # 若上述代碼執行報錯(大概率是由于付費漫畫),則執行此部分代碼 except Exception as err: #跳過錯誤代碼 pass

運行之后會自動打開漫畫的內容頁,并拖動右側的滑動條(模擬了手動操作,緩慢拖動是為了讓圖片充分加載),其中的sleep方法和網速有一定的關系,網速好的可以適當減少延時的時間,網速差可適當延長在寫拖動滑動條的代碼時,我嘗試了非常多種拖動寫法,也模擬了按下方向鍵的操作,可是只有這一種方法使用成功了。我認為失敗的原因可能是剛打開界面的時候會有一個導航條擋住滑塊,導致無法定位到滑塊的坐標(因為我用其他網頁測試的時候都是可以拖動的)

使用的try是為了防止有一些章節會彈出付費窗口,導致程序報錯,使后續無法運行,即遇到會報錯的情況就跳過此段代碼,執行except中的選項

這段程序運行完之后有一個dongman.html文件保存在當前文件夾下,里面就包含了所有圖片的url,接下來只要讀取這個文件的內容就可以提取到所有的漫畫地址了

下載漫畫圖片

當我們保存完網頁的源代碼之后,接下來的操作就變得簡單了 我們要做的就是提取文件內容,將圖片下載到本地

#用beautifulsoup打開本地文件 html_new = BeautifulSoup(open('dongman.html', encoding='utf-8'), features='html.parser') #提取html文件中的主體部分 soup = html_new.find(id="mainView") #設置變量i,方便為保存的圖片命名 i = 0 #提取出主體部分中的img標簽(因為圖片地址保存在img標簽中) for items in soup.find_all("img"): #提取圖片地址信息 item = items.get("src") #請求圖片地址 comic_pic = requests.get(item).content #print(comic_pic) #嘗試提取圖片,若發生錯誤則跳過 try: #打開文件夾,將圖片存入 with open('comic/' + str(name_comic) + '/' + str(page_name) + '/' + str(i + 1) + '.jpg', 'wb') as f: #print('正在下載第 ', (i + 1), ' 張圖片中') print('正在下載' , str(name_comic) , '-' , str(page_name) , '- 第' , (i+1) , '張圖片') #寫入操作 f.write(comic_pic) #更改圖片名,防止新下載的圖片覆蓋原圖片 i += 1 #若上述代碼執行報錯,則執行此部分代碼 except Exception as err: #跳過錯誤代碼 pass

下載結果

到了這里代碼就寫完了,來看一下運行結果:

打開文件夾看到:

完整代碼

import requests from lxml import etree from selenium import webdriver from time import sleep from bs4 import BeautifulSoup from selenium.webdriver.chrome.options import Options import os ''' ============================ python學習群:695185429 ============================ ''' #打開騰訊動漫首頁 url = 'https://ac.qq.com/' #給網頁發送請求 data = requests.get(url).text #將網頁信息轉換成xpath可識別的類型 html = etree.HTML(data) #提取到每個漫畫的目錄頁地址 comic_list = html.xpath('//a[@class="in-rank-name"]/@href') #print(comic_list) #遍歷提取到的信息 for comic in comic_list: #拼接成為漫畫目錄頁的網址 comic_url = url + str(comic) #從漫畫目錄頁提取信息 url_data = requests.get(comic_url).text #準備用xpath語法提取信息 data_comic = etree.HTML(url_data) #提取漫畫名--text()為提取文本內容 name_comic = data_comic.xpath("http://h2[@class='works-intro-title ui-left']/strong/text()") #提取該漫畫每一頁的地址 item_list = data_comic.xpath("http://span[@class='works-chapter-item']/a/@href") # print(name_comic) # print(item_list) #以漫畫名字為文件夾名創建文件夾 os.makedirs('comic/' + str(name_comic)) #將一本漫畫的每一章地址遍歷 for item in item_list: #拼接每一章節的地址 item_url = url + str(item) #print(item_url) #請求每一章節的信息 page_mes = requests.get(item_url).text #準備使用xpath提取內容 page_ming = etree.HTML(page_mes) #提取章節名 page_name = page_ming.xpath('//span[@class="title-comicHeading"]/text()') #print(page_name) #再以章節名命名一個文件夾 os.makedirs('comic/' + str(name_comic) + '/' + str(page_name)) #以下為代碼的主體部分 #設置谷歌無界面瀏覽器 chrome_options = Options() chrome_options.add_argument('--headless') chrome_options.add_argument('--disable-gpu') #webdriver位置 path = r'/home/jmhao/chromedriver' #瀏覽器參數設置 browser = webdriver.Chrome(executable_path=path, options=chrome_options) #開始請求第一個章節的網址 browser.get(item_url) #設置延時,為后續做緩沖 sleep(2) #browser.get_screenshot_as_file(str(page_name) + ".png") #嘗試執行下列代碼 try: #設置自動下滑滾動條操作 for i in range(1, 100): #滑動距離設置 js = 'var q=document.getElementById("mainView").scrollTop = ' + str(i * 1000) #執行滑動選項 browser.execute_script(js) #延時,使圖片充分加載 sleep(2) sleep(2) #將打開的界面截圖保存,證明無界面瀏覽器確實打開了網頁 browser.get_screenshot_as_file(str(page_name) + ".png") #獲取當前頁面源碼 data = browser.page_source #在當前文件夾下創建html文件,并將網頁源碼寫入 fh = open("dongman.html", "w", encoding="utf-8") #寫入操作 fh.write(data) #關掉無界面瀏覽器 fh.close() #下面的操作為打開保存的html文件,提取其中的圖片信息,并保存到文件夾中 #用beautifulsoup打開本地文件 html_new = BeautifulSoup(open('dongman.html', encoding='utf-8'), features='html.parser') #提取html文件中的主體部分 soup = html_new.find(id="mainView") #設置變量i,方便為保存的圖片命名 i = 0 #提取出主體部分中的img標簽(因為圖片地址保存在img標簽中) for items in soup.find_all("img"): #提取圖片地址信息 item = items.get("src") #請求圖片地址 comic_pic = requests.get(item).content #print(comic_pic) #嘗試提取圖片,若發生錯誤則跳過 try: #打開文件夾,將圖片存入 with open('comic/' + str(name_comic) + '/' + str(page_name) + '/' + str(i + 1) + '.jpg', 'wb') as f: #print('正在下載第 ', (i + 1), ' 張圖片中') print('正在下載' , str(name_comic) , '-' , str(page_name) , '- 第' , (i+1) , '張圖片') #寫入操作 f.write(comic_pic) #更改圖片名,防止新下載的圖片覆蓋原圖片 i += 1 #若上述代碼執行報錯,則執行此部分代碼 except Exception as err: #跳過錯誤代碼 pass # 若上述代碼執行報錯(大概率是由于付費漫畫),則執行此部分代碼 except Exception as err: #跳過錯誤代碼 pass