tml> <head> <title>網頁特效|Linkweb.cn/Js|---對聯廣告</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <body style="margin:0px;"> <div align="center"> <center> <table border="1" width="776" height="3000" cellspacing="0" cellpadding="0"> <tr> <td width="100%" valign="top"><div align="center" style="color:green;font-size:23pt;font-family:黑體;"><br><br> 頁<br>面<br>區<br>域</div></td> </tr> </table> </center> </div> <SCRIPT LANGUAGE="JavaScript"> <!-- var showad = true; var Toppx = 60; //上端位置 var AdDivW = 100; //寬度 var AdDivH = 360; //高度 var PageWidth = 800; //頁面多少寬度象素下正好不出現左右滾動條 var MinScreenW = 1024; //顯示廣告的最小屏幕寬度象素 var ClosebuttonHtml = '<div align="right" style="position: absolute;top:0px;right:0px;margin:2px;padding:2px;z-index:2000;"><a href="javascript:;" onclick="hidead()" style="color:red;text-decoration:none;font-size:12px;">關閉</a></div>' var AdContentHtml = '<div align="center" style="color:green;font-size:23pt;font-family:黑體;"><br><br>廣<br>告<br>內<br>容</div>'; document.write ('<div id="Javascript.LeftDiv" style="position: absolute;border: 1px solid #336699;background-color:#EEEEE2;z-index:1000;width:'+AdDivW+'px;height:'+AdDivH+'px;top:-1000px;word-break:break-all;display:none;">'+ClosebuttonHtml+'<div>'+AdContentHtml+'</div></div>'); document.write ('<div id="Javascript.RightDiv" style="position: absolute;border: 1px solid #336699;background-color:#EEEEE2;z-index:1000;width:'+AdDivW+'px;height:'+AdDivH+'px;top:-1000px;word-break:break-all;display:none;">'+ClosebuttonHtml+'<div>'+AdContentHtml+'</div></div>'); function scall(){ if(!showad){return;} if (window.screen.width<MinScreenW){ alert("臨時提示:\n\n顯示器分辨率寬度小于"+MinScreenW+",不顯示廣告"); showad = false; document.getElementById("Javascript.LeftDiv").style.display="none"; document.getElementById("Javascript.RightDiv").style.display="none"; return; } var Borderpx = ((window.screen.width-PageWidth)/2-AdDivW)/2; document.getElementById("Javascript.LeftDiv").style.display=""; document.getElementById("Javascript.LeftDiv").style.top=document.body.scrollTop+Toppx; document.getElementById("Javascript.LeftDiv").style.left=document.body.scrollLeft+Borderpx; document.getElementById("Javascript.RightDiv").style.display=""; document.getElementById("Javascript.RightDiv").style.top=document.body.scrollTop+Toppx; document.getElementById("Javascript.RightDiv").style.left=document.body.scrollLeft+document.body.clientWidth-document.getElementById("Javascript.RightDiv").offsetWidth-Borderpx; } function hidead() { showad = false; document.getElementById("Javascript.LeftDiv").style.display="none"; document.getElementById("Javascript.RightDiv").style.display="none"; } window.onscroll=scall; window.onresize=scall; window.onload=scall; //--> </SCRIPT> </body> </html> |
轉藏到我的圖書館 獻花(1) +1 分享: 微信
QQ空間QQ好友新浪微博推薦給朋友
來自: 中華秘方總匯 >《網頁特效》
我有兩個愛好,一個是傳統文化,一個是高新技術。
沒錯,我一直探索用高新技術來激活傳統文化,用傳統文化來滋養高新技術。
這不,我打算寫一個基于TensorFlow的自動對春聯的程序。經過嘗試,目前已經完成了。
Input是人工輸入的上聯,Output是機器自動給出的下聯。
Input: <start> 神 州 萬 里 春 光 美 <end> [2, 61, 27, 26, 43, 4, 20, 78, 3]
Output:<start> 祖 國 兩 制 好 事 興 <end> [2, 138, 11, 120, 428, 73, 64, 46, 3]
Input: <start> 爆 竹 迎 新 春 <end> [2, 167, 108, 23, 9, 4, 3]
Output: <start> 瑞 雪 兆 豐 年 <end> [2, 92, 90, 290, 30, 8, 3]
Input: <start> 金 牛 送 寒 去 <end> [2, 63, 137, 183, 302, 101, 3]
Output: <start> 玉 鼠 喜 春 來 <end> [2, 126, 312, 17, 4, 26, 3]
Input: <start> 錦 繡 花 似 錦 <end> [2, 68, 117, 8, 185, 68, 3]
Output: <start> 繽 紛 春 如 風 <end> [2, 1651, 744, 4, 140, 7, 3]
Input: <start> 春 風 送 暖 山 河 好 <end> [2, 4, 5, 183, 60, 7, 71, 45, 3]
Output: <start> 瑞 雪 迎 春 世 紀 新 <end> [2, 92, 90, 27, 4, 36, 99, 5, 3]
Input: <start> 百 花 爭 艷 春 風 得 意 <end> [2, 48, 8, 164, 76, 4, 5, 197, 50, 3]
Output: <start> 萬 馬 奔 騰 喜 氣 福 多 <end> [2, 6, 28, 167, 58, 17, 33, 15, 113, 3]
復制代碼
人工智能的背后是大量數據的訓練,而僅僅這些訓練數據就讓人很為難:找不到啊。
網絡上有一個開源的對對聯項目,里面有一個70萬條的對聯數據集,項目地址如下:GitHub - wb14123/couplet-dataset: Dataset for couplets. 70萬條對聯數據庫。
但是,我并不滿意,因為我要的是春聯,不是對聯。
對聯雖然包含了春聯,但是春聯是帶有民俗氣息的,里面充滿了喜慶祥和的味道。
于是我在網絡上找到了一個春聯網站 www.duiduilian.com/chunlian/ ,里面的內容質量不錯。于是,我就寫了個爬蟲程序去采集數據。
打開網址,瀏覽器按F12分析網頁。
分析可見,我們關注的主體內容都在<div class="content_zw"></div>之間,而且一幅對聯用<p></p>包裹,上下聯用,分割。
這是極其標準的數據爬取的素材案例,或許這就是為了教學而設計的。
如果我們要獲取春聯內容的話,只需要通過網址加載下來html代碼,然后取出正文部分,然后通過<p>標簽分組,每副春聯通過逗號“,”分上下聯,最后存入文件就行了。
開干。
首先加載網址,取出我們關注的正文。
import requests
import re
# 模擬瀏覽器發送http請求
response = requests.get(url)
# 設置編碼方式
response.encoding='gbk'
# 獲取整個網頁html
html = response.text
# 根據標簽分析,從html中獲取正文
allText = re.findall(r'<div class="content_zw">.*?</div>', html, re.S)[0]
print(url+"\n allText:"+allText)
復制代碼
其中值得一講的就是re是正則表達式的支持庫,上面的re.findall就是從html文本中找到所有形狀類似于<div class="content_zw">亂七八糟什么內容都行</div>的內容。因為可能會找到多個,但是此處場景只有一個,所以取第一個[0]就是我們想要的。
這樣,我們就拿到了如下內容:
<div class="content_zw">
<p>春來眼際,喜上眉梢</p>
<p>春光普照,福氣長臨</p>
<p>春和景明,物阜年豐</p>
<p>春降大地,福滿人間</p>
<p>春明花艷,民富國強</p>
……
</div>
復制代碼
從目標html文本中,選出對聯。
text = "<div class='content_zw'><p>春來眼際,喜上眉梢</p><p>春光普照,福氣長臨</p></div>"
couplets = re.findall(r'<p>(.*?)</p>',text)
print(couplets) # ['春來眼際,喜上眉梢', '春光普照,福氣長臨']
for couplet in couplets:
cs = couplet.split(",")
print("上聯:",cs[0], ",下聯:",cs[1])
# 上聯: 春來眼際 ,下聯: 喜上眉梢 上聯: 春光普照 ,下聯: 福氣長臨
復制代碼
這里面依然用到了re.findall。這個方法是爬蟲程序中很常用的方法。所謂爬取數據,其實就是拿到全量文本,然后撕下來你感興趣的一段文本。如何來撕,就靠re配合一系列規則來實現。
re.findall(r'<p>(.*?)</p>',text)指的是從text中,選取出<p>亂七八糟什么內容都行</p>形狀的括號內的內容。這里值得一說的是,它只要()里面的內容。
舉個例子:
text = "<p>春來眼際,喜上眉梢</p>"
text_r1 = re.findall(r'<p>(.*?)</p>',text)[0]
print(text_r1) # 春來眼際,喜上眉梢
text_r2 = re.findall(r'<p>.*?</p>',text)[0]
print(text_r2) # <p>春來眼際,喜上眉梢</p>
復制代碼
看上面的兩個列子,就可以理解帶不帶括號的區別了。
獲取到了couplets其實是一個數組['春來眼際,喜上眉梢', '春光普照,福氣長臨']。然后,再循環這個數組,通過split(",")拆分出上下聯。這樣你就有了上下聯的春聯,然后你就可以為所欲為了。
上面只是說了一個url頁面。
但是,實際上,有好多并列的頁面。
第一個入口頁面我們可以手動輸進去,但是其他頁面你得自動一些了吧。
下面是分頁部分的html代碼分析:
我們F12調試可以看到,分頁部分和春聯內容一樣,也在div.content_zw內部,它的整體標簽是<div id="pages"></div>包裹的。
<div id="pages">
<a class="a1" href="/chunlian/4zi.html">上一頁</a>
<span>1</span>
<a href="/chunlian/4zi_2.html">2</a>
<a href="/chunlian/4zi_3.html">3</a>
……
<a href="/chunlian/4zi_8.html">8</a>
<a class="a1" href="/chunlian/4zi_2.html">下一頁</a>
</div>
復制代碼
其中a標簽里面的href就是相對路徑的url連接,我們嘗試取一下。
# 獲取分頁相關的網頁html
pages = re.findall(r'<div id="pages">.*?</div>', allText, re.S)[0]
page_list = re.findall(r'href="/chunlian/(.*?)">(.*?)<',pages)
page_urls = []
for page in page_list:
if page[1] != '下一頁':
page_url="https://www.duiduilian.com/chunlian/%s" % page[0]
page_urls.append(page_url)
# page_urls 就是所有鏈接
復制代碼
相信通過之前的說明,這里大多數代碼你已經能看明白了。這和獲取p標簽里的對聯很像,區別就是這里面有2個()。我們打印一下匹配出來的page_list:
page_list: [('4zi.html', '上一頁'), ('4zi_2.html', '2'), ('4zi_3.html', '3')
, ('4zi_4.html', '4'), ('4zi_5.html', '5'), ('4zi_6.html', '6')
, ('4zi_7.html', '7'), ('4zi_8.html', '8'), ('4zi_2.html', '下一頁')]
復制代碼
原來, re.findall(r'href="/chunlian/(.*?)">(.*?)<',pages)意思就是,要取2處地方,分別是……/chunlian/(這個位置1)">(這個位置2)<……。
除了“下一個”按鈕之外,其他的<a>鏈接正好就是1~8頁的完整地址,這樣我們就全獲取到了。
好了,分頁也搞定了,那所有鏈接就有了,每一個鏈接如何撕下來春聯句子也就有了,下面是全部代碼。
import requests
import re
def getContent(url):
response = requests.get(url)
response.encoding='gbk'
html = response.text
allText = re.findall(r'<div class="content_zw">.*?</div>', html, re.S)[0]
return allText
def getPageUrl(allText):
pages = re.findall(r'<div id="pages">.*?</div>', allText, re.S)[0]
page_list = re.findall(r'href="/chunlian/(.*?)">(.*?)<',pages)
page_urls = []
for page in page_list:
if page[1] != '下一頁':
page_url="https://www.duiduilian.com/chunlian/%s" % page[0]
print("page_url:",page_url)
page_urls.append(page_url)
return page_urls
def do(url, file_name):
c_text = getContent(url)
pages = getPageUrl(c_text)
f = open(file_name,'w')
for page_url in pages:
page_text = getContent(page_url)
page_couplets = re.findall(r'<p>(.*?)</p>',page_text)
str = '\n'.join(page_couplets)+'\n'
f.write(str)
f.close()
url = 'https://www.duiduilian.com/chunlian/4zi.html'
file_name = 'blog4.txt'
do(url, file_name)
復制代碼
我故意省掉了注釋,因為我想說,其實這個功能只有30行代碼。
最終,它把獲取到的數據存到名字為blog4.txt文件中了。
這是4字的春聯,還有5字的,6字的,7字的,可以如法炮制。
看完上面的內容,你可以去吃飯了,因為你已經掌握了溫室大棚里的生存技能。
吃完飯后,我告訴你,上面30行代碼的實現,其實是理想情況,現實是不可能是這樣的。
實際上還有很多異常情況。
比如,下面這個,春聯正文的<p>標簽里面有我們想要的,也有我們不想要的,都拿過來肯定用不了。
再看下面這個,春聯正文里就沒有<p>標簽,那你想辦法吧。
再看下面這個,當分頁過多時,出現了省略號,有些頁碼的鏈接就不全了,有些數據就取不到了。
最后,再看下面這個,分頁是列表形狀的,你還用原來的方法就無法適配了。
是吧,教程和實戰還是有區別的。
教程,越干凈越好,要用最短的距離來講述一個知識點,干擾項越少越好。
實戰,越真實越好,要用最全面的考慮來設計一項功能,異常項越多越好。
然是各種AI網站了。第9個自動生成各種美女俊男照片,顏值黨的春天來了。
https://essay.1ts.fun/
小論文神器可在一分鐘內生成你需要的論文,基于大數據和人工智能,代替手動搜索復制粘貼,系統偶爾冒傻,用詞越精準,嘗試越多效果越好,高級版字數無限,段落更新無限,關鍵詞無限量添加,還有標準的word文檔下載,更平穩的風格控制。
https://aimwriting.mtutor.engkoo.com/#more
寫英語作文,怎樣寫的更地道,寫英語郵件,怎樣別出現硬傷,用這個網站就可以檢查。
覆蓋從小學到雅思的各類考試范圍,AI技術自動檢查拼寫和語法錯誤,提供修改建議,無須輸入文字,可一鍵上傳照片,自動識別作文內容,還有查詞助手和短語助手兩個新功能。簡直就是學習英語的法寶。比如下面這篇高考作文,給出了23分的高分。好句子,好的詞匯都給標記出來了。
https://wyc.5118.com/
近期大熱的一款智能寫作工具, 5118智能原創讓文案人省了不少事兒,給它一段話,機器輔助人腦,即時搜索出互聯網數十億文章素材提高創作靈感,創出一個小宇宙,簡直是文案人的救星。
這AI寫作功能可不是一般的齊全:
https://www.giiso.com/#/
不同于知乎上大火的狗屁不通文章生成器,這個文章生成器絕對是有邏輯的。一款內容AI輔助創作網站, 只要輸入幾個關鍵詞,然后幾篇同類型的文章就瞬間出來了。還有智能推薦素材,稿件改寫,稿件查重,稿件糾錯等功能,是自媒體,新媒體的寫作好幫手。不過貌似一天只有一次的使用機會。比如我輸入新冠肺炎,美國,確診三個關鍵詞,立即出來15篇稿子。莫有感情的寫作機器人。
http://jiuge.thunlp.cn/fengge.html
九歌是清華大學自然語言處理與社會人文計算實驗室研發的人工智能詩歌寫作系統。該系統采用最新的深度學習技術,結合多個為詩歌生成專門設計的模型,基于超過80萬首人類詩人創作的詩歌進行訓練學習。輸入幾個關鍵詞,一首詩立馬出來。比如我輸入,江畔,月,寫一首憶舊感喟的七言絕句。3秒后就出來了,還有那么點意思。
https://petalica-paint.pixiv.dev/index_zh.html
簡單來講,就是對你的線稿進行上色, 可以選擇自動上色, 也可以自己指定某部分的顏色來自定義。
https://bigjpg.com/
使用最新人工智能深度學習技術——深度卷積神經網絡。它會將噪點和鋸齒的部分進行補充,實現圖片的無損放大。只要上傳圖片就可以了。
http://duilian.msra.cn/app/couplet.aspx
再有人考你對聯,再也不怕了!
http://www.seeprettyface.com/index.html
聽名字就感覺這網站特別厲害,各種類型的照片都有。顏值黨的福利來了!
比如我選了中國網紅和中國明星這兩個選項,然后各種照片就出來了,關鍵是這不是真人,程序員真是太厲害了,所有代碼都開源了。
中國網紅-虛擬
中國明星-虛擬
*請認真填寫需求信息,我們會在24小時內與您取得聯系。