在很多年前…
我以前看到过不少随机名言,但是碍于当时没有技术不会做,虽然很喜欢.但是也不知道怎么去实现.还好现在技术可以实现,而且也有一个比较好的平台.提供了每天一句话.刚好就用来作名言的数据源了.[地址]
如果要查看效果,可以在页面底部看到相应效果(每次刷新显示的内容都不一样).
还需要…
因为使用了Python的两个库,因此必须安装:requests,BeautifulSoup.这两个库.
安装如下:
1 2 | pip install requests pip install beautifulsoup4 |
安装之后,就可以使用了.
简单说一下…
首先,这个程序并没有做到非常”智能”,有些地方使用了print(大概是两个地方).因此,你需要自行复制到某个地方,在继续…..
简单说一下核心的一个函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | def _getMessage(self): messagedata = {} for x in range(self.start_index,self.end_index): url = 'http://wufazhuce.com/one/%d' print("%d-------->正在执行......" % (x)) r = requests.get(url % (x)) soup = BeautifulSoup(r.text,"html.parser") if soup and soup.select(".one-cita"): #print() message = (str(soup.select(".one-cita")[0].contents[0])).strip() if message: messagedata[str(x)]=message soup = None r = None url = None print(messagedata) print(len(messagedata)) |
没错上面这个就是核心函数了,
- 首先使用了for循环对数据进行循环读取(self.start_index,self.end_index分别是开始的期号和结束的期号,可以自己设定,具体要看源码(源码在下面)..).
- 定义了一个messagedata的dict,dict的key存的是相应期号,value存的是名言内容.(好像这一句才是第一步…)
- 在循环中,动态定义url,并且使用了requests第三方库进行网页的获取网页内容.[关于requests]
- 拿到内容之后,基本就放心了.
- 然后使用了BeautifulSoup对HTML进行解析,话说……BeautifulSoup是个很神奇,很厉害,很霸气的HTML解析库..(反正,正反就是很厉害)
- 使用了Python自带的HTML解析引擎,”html.parser”,也有很多第三方的可选.[关于BeautifulSoup]
- 这一句可能是最复杂的,message = (str(soup.select(“.one-cita”)[0].contents[0])).strip(),这一句首先是从soup对象中select了class=”.one-cita”的div的数据(select函数是BeautifulSoup提供的使用HTML的class方式选取内容,这一点就方便了很多,select返回的是list,因此使用了[0]获取第一个,跟着使用contents来获取其中的内容,contents继续返回list,接着继续获取[0]),获取到数据之后,str函数将其转换为str类型,并且使用strip()函数对其特殊符号(比如:\t,\n,空格)这些进行清理.返回一个干干净净的文本..OYeah.
- 然后就是将期号作为key,名言内容作为value放到dict里面.
- 说完了.
源码
源码使用如下:
必须安装requests和BeautifulSoup这两个库,否则..运行不了.
使用步骤如下:
懒得写了,直接看源码里面的吧.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | #-*- coding=utf-8 -*- import os import requests import time from bs4 import BeautifulSoup ''' 通过Python的dict生成JavaScript的数组. ''' class GeneratorJsArray(object): def main(self): # 内容太多,删掉一堆. message = {'26': '跟我去北方吧,逃离爱情的肤浅,南方的江山太妩媚,腐蚀了我的热血。from 左小祖咒《爱情的枪》', '776': '到死之前,我们都是需要发育的孩子,从未长大,也从未停止生长。就算改变不了这个世界,这个世界也别想将我们改变。by 大冰', '275': '青春就是不停地告别,告别就是死亡一点点。by 赵西栋', '30': '很高兴又见到你。by 韩寒', '78': '我不知道庆典之后的日子该怎么过。 by 村上龙', '264': '只有不快乐的人才想知道未来。by 凯特·莫顿', '58': '即使头上长出鹿角,口琴的魔力依然无法停止。今日宜留齐刘海,忌独立小桥。by 张冠仁'} print("var mingyan=new Array();") for key,value in message.items(): print("mingyan.push("{\'index\':%d,\'content\':'%s'}");" % (int(key),value)) ''' 抓取One的名言. ''' class One(object): def __init__(self): self.start_index = 14 self.end_index = 1384 def _getMessage(self): messagedata = {} for x in range(self.start_index,self.end_index): url = 'http://wufazhuce.com/one/%d' print("%d-------->正在执行......" % (x)) r = requests.get(url % (x)) soup = BeautifulSoup(r.text,"html.parser") if soup and soup.select(".one-cita"): #print() message = (str(soup.select(".one-cita")[0].contents[0])).strip() if message: messagedata[str(x)]=message soup = None r = None url = None print(messagedata) print(len(messagedata)) def main(self): print("1.先使用我......:") #self._getMessage() if __name__ == '__main__': # 1.先使用One的main函数获取输出结果. # 2.将输出结果复制出来,注意是复制... # 3.粘贴给GeneratorJsArray类的main函数的message变量...... # 4.注释掉One的调用. # 5.调用GeneratorJsArray类的main函数获取js的输出. # 6.新建一个js文件,把刚才输出的结果粘贴进去. # 7.搞定. gj = GeneratorJsArray() gj.main() |
另外,我已经生成了一个了.可以直接用的.
调用方式,将下面的内容保存成mingyan.js,然后在页面中创建一个<p id=”showMingyan”></p>,然后使用js:$(“#showMingYan”).html(getMingYanHref());进行调用即可.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | /** 随机获取名言. author:prd. version:2016.7.22 note:名言均来自[一个](http://www.wufazhuce.com) 使用示例(关于使用的调用,请参考最底部的函数.): 1.先引入本js. 2.在想使用的地方,调用getMingYan()函数即可获取名言.[getMingYanHref()获取可以跳转至One的名言,getMingYanContent():只获取名言内容] 3.名言中存储为json数据,index对应One的每一期号,content是名言. 4.请尊重版权,在展示名言的同时,可将名言链接至One.例如:<a href="http://wufazhuce.com/one/14">是狼是人,日久见心。by 小饭</a>其中的14为期号. */ var mingyan=new Array(); mingyan.push("{'index':1165,'content':'失眠就像是,一个无人认领的梦,一段言无所向的人生,和一场明知故犯的恋情。你不愿这些发生,但你也清楚这些早晚要发生,就像终于盼来了困意,却也迎来了黎明。by 郑执'}"); mingyan.push("{'index':1212,'content':'道路虽然拥挤,却是寂寞的,因为它不是被爱的。 from 《像个孩子》'}"); mingyan.push("{'index':563,'content':'如果我不想被悲伤和怀疑打倒,就非得好好吃饭不可。by 方悄悄'}"); mingyan.push("{'index':1291,'content':'每个人都是孤独发光的星体,至亲、爱人、朋友,构成了我们的星系。星辰会陨落,轨道会迁移,或许再也见不到你。我会记得,你的光芒温暖过我的眼睛。而我,也曾闪耀在你的夜空里。 by 路明'}"); mingyan.push("{'index':855,'content':'我觉得世界上所有事情都在你没有准备好的时候,就开始;在你准备好的时候,就结束了。from《年华似水》'}"); mingyan.push("{'index':1068,'content':'天青色等烟雨,而我在等你。by 方文山'}"); mingyan.push("{'index':435,'content':'不能一直踮着脚爱一个人,重心不稳,撑不了太久的。by 佚名'}"); mingyan.push("{'index':342,'content':'没有深夜痛哭过的人,不足以谈人生。by 高秉涵'}"); mingyan.push("{'index':918,'content':'毁掉我们的不是我们所憎恨的东西,而恰恰是我们所热爱的东西。by 尼尔·波兹曼'}"); mingyan.push("{'index':1258,'content':'信任这种东西有时候挺奇怪的,就是那种你在我背后开了一枪,我依然觉得是枪走了火的感觉。by 暖小团'}"); mingyan.push("{'index':889,'content':'原来生命从头到尾都是一场浪费,你需要判断的仅仅在于,这次浪费是否是“美好”的。后来,当我每做一件事情的时候,我便问自己,你认为它是美好的吗?如果是,那就去做吧,从这里出发,我们去抵抗命运,享受生活。by 吴晓波'}"); mingyan.push("{'index':449,'content':'世上只有一种真正的英雄主义,那就是认清生活的真相后依然热爱生活。by 罗曼·罗兰'}"); mingyan.push("{'index':1164,'content':'有时候我们认为生活背叛了我们,但是很久以后我们才发现,其实是我们自己背叛了自己。 from 《西伯利亚的理发师》'}"); mingyan.push("{'index':717,'content':'所有的悲伤,总会留下一丝欢乐的线索。所有的遗憾,总会留下一处完美的角落。我在冰封的深海,找寻希望的缺口。却在午夜惊醒时,蓦然瞥见绝美的月光。from 《缺口》'}"); mingyan.push("{'index':1279,'content':'不管怎么费尽心力,人会受伤的时候就会受伤。by 村上春树'}"); mingyan.push("{'index':913,'content':'有人说:真正的爱情,背后没有秘密。说这话的人,既不明白爱情,也不明白秘密。from《北京乐与路》'}"); // ... 部分数据. /** 随机获取名言. 直接调用此函数即可. */ function getMingYan(){ return (mingyan[parseInt(Math.random()*(mingyan.length-1)+1)]); } /* 获取名言,并链接至One. */ function getMingYanHref(){ var item = getItem(); return "<a href='http://wufazhuce.com/one/"+item.index+"' target='_blank'>"+item.content+"</a>"; } function getItem(){ return eval('(' +(mingyan[parseInt(Math.random()*(mingyan.length-1)+1)])+ ')'); } /* 只获取内容. */ function getMingYanContent(){ var item = getItem(); return item['content']; } |
到此.