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小时内与您取得联系。