读书十余载,以为能像古人一样才高八斗,满腹锦纶。可事实是胸无点墨,别无所长。仰星辰,观古今之差。同为寒窗十载,理应差别不会有这么大。可是自己痛定思痛,我们却差古人太多,古有头悬梁锥刺股,凿壁偷光之为,而我们生活安逸美好。安逸是好,但会让人逐渐堕落,不思进取。
我虽无面壁,却有面壁之实。今日,初学Python,让我感触良多,同为万物之灵,却有如此大的差别。最大的错误在于我们缺少奋发求学的信心、缺少一往无前的勇气、缺少止于至善的恒心。于是,在Python这一门当今世上不可或缺的一门知识上,我亦不能落人于后。因此,我要全力奋战,竭尽全力去学好这门知识。让我的世界不是迷茫的一片,让这门知识成为我世界中一颗茁壮成长的树苗。让我的人生不后悔,不留遗憾。
Python对于我来说,并不陌生,因为这是一门编程语言,也属于一门解释性语言。比起之前所学的语言要简单的多。所以对于有点程序基础的我来说,入门真的是很简单,我才学两三天,便大致掌握了基础知识。于是,在今天,我用Python爬取了一部小说,这对于我这个初学者来说是一个很大的进步。
现在我简单来说一下Python爬取说的方法,以及相关的程序,首先我们需要安装Python,但是我在eclipse中安装了一个Python插件,不过都一样。之后我们需要了解网页,对网页中的审查元素有一个大致的认识。这样有利于我们爬取网页的时候方便查找节点。同时我们需要了解一个Python库。BeautifulSoup,它的作用是将一段文档传入BeautifulSoup 的构造方法,就能得到一个文档的对象, 可以传入一段字符串或一个文件句柄。
爬取网页的代码主要是:
# 获取网页
def getHtml(src):
page = requests.get(src)
html = page.content
return html
这个主要是网页中图片下载:
# 定义回调方法,计算下载进度
def cbk(a, b, c):
'''''
a:数据块数量
b:数据块大小
c :文件大小
'''
pro = 100 * a * b / c # 计算当前进度
if pro > 100:
pro = 100
print '当前下载进度:', '%' + '%4.2f' % pro
这个就是爬取小说部分代码,它主要是从节点开始,然后一章一章的爬取,之后整理。
def getText(html):
global i
i +=i
soup = bs(html,'lxml')
tip = soup.find_all("div",attrs={"class":"content"})
for t in tip:
for h in t.find_all('h1'):
with open('1.txt','a+')as f:
text = h.getText().encode('utf-8')
squencel =["\t","\t",text,"\n","\n"]
f.writelines(squencel)
squencel = []
for st in t.find_all('div',class_="showtxt"):
#文本处理,去除首尾空格及中间空格,去除空格后换行空两个字符
text1='\n '.join(st.text.strip().split()).encode('utf-8')
try:
with open('1.txt','a+')as f1:
squence2=[' ',text1,'\n','\n','\n','\n']
f1.writelines(squence2)
squence2 = []
except Exception as e:
print '写入错误:',e
else:
print'第',i,'章写入成功'
for a in t.find_all('a'):
if a.getText()=='下一章'.decode('utf-8'):
newhtml = 'http://www.biqukan.com'+a['href']
getHtml(newhtml)
with open('a.txt','a')as f2:
f2.writelines(newhtml)
f2.writelines('\n')
以上主要是我这个菜鸟的简单介绍而已,由于时间也不早了,改天再给完整的代码了。有不足之处,望诸位大神包含体谅。毕竟初生牛犊不怕虎,所以我就写了这简单的几段话,还请笑纳。