今天在抄写一段代码的时候,一个简单的爬虫,不太懂,就一句一句的查,查出了很多不会的地方,作个记录吧还是,首先把代码贴上来
#-*-coding:utf-8-*-
from urllib import urlretrieve
def firstNonBlank(lines):
for eachLine in lines:
if not eachLine.strip():
continue
else:
return eachLine
def firstLast(webpage):
f = open(webpage)
lines = f.readlines()
f.close()
print firstNonBlank(lines),
lines.reverse()
print firstNonBlank(lines),
def download(url = 'http://www',
process = firstLast):
try:
retval = urlretrieve(url)[0]
except IOError:
retval = None
if retval:
process(retval)
if __name__== '__main__':
download()
首先不懂得就是urlretrieve(url)这个方法,查了一下urllib.urlretrieve(url[, filename[, reporthook[, data]]])
其中,url是本地或者外部地址,filename是存在本地的文件名,
reporthook:回调函数:又不太懂,不过有一个例子,对此对他简单的理解,就是可以作为用户交互的方式:获取新浪主页并通过回调函数显示进度:
from urllib import urlretrieve
def reporthook(block_n,block_size,all_size):
per = 100 * block_n * block_size / all_size
if per > 100:
pre = 100
print "%.2f%%" % per
url = "http://www.sina.com.cn"
local = 'e:\\sina.html'
retval = urlretrieve(url,local,reporthook)[0]
结果如下:
OK,还是回到urlretrieve这个方法上,返回值是什么呢?我加了两行代码,显示出来了,如下:
def download(url = 'http://www',
process = firstLast):
try:
retval = urlretrieve(url)[0]
print "-" *20
print urlretrieve(url)[0]
print '-' * 20
print urlretrieve(url)[1]
except IOError:
retval = None
if retval:
process(retval)
加上的结果,如下:
我们可以看见,返回的二元组的第一个元素就是一个临时文件的名字,而第二个元素就是网页的信息,和wireshark一样了
接下来,阅读到readlines方法,又遇见问题了,我记得以前用过read函数,有什么区别么?查了一下:有如下区别:
没有找到一个让我很清楚的答案,先放一下:
还有就是strip和split的区别,其实我觉得两者没有什么联系,可能就是长的比较像,所以就拿到一起说了吧。写了个小代码,很弱的!呵呵
stra= " hello@world woqu "
a = stra.split("@")
print a
b = str.strip(stra)
print "hello,world!",b,"——————"
得出如下的结果:
非常简单了吧!split就是分开,按照某一个规则将字符串分开而已,而strip,就是将字符串的首尾的空格去掉而已