首页 > 代码库 > python爬取博客园首页文章
python爬取博客园首页文章
先上代码,比较长。
1 # -*- coding=utf-8 -*- 2 __author__ = ‘lhyz‘ 3 4 import urllib 5 import re 6 import socket 7 import time 8 import os 9 10 #使用当前时间创建文件夹11 ISOTIMEFORMAT=‘%Y-%m-%d-%X‘12 times=time.strftime( ISOTIMEFORMAT, time.localtime() )13 dir=‘./%s‘%times14 os.mkdir(dir)15 16 #设置网络连接超时17 socket.setdefaulttimeout(10)18 19 ‘‘‘20 获取首页文章链接并下载21 ‘‘‘22 23 #匹配小文章标题24 pattern=‘<h3>‘25 26 #下载进度说明27 ‘‘‘28 在print输出的后面加上逗号可以不换行29 ‘‘‘30 def cb(a,b,c):31 per=100.0*a*b/c32 if per>100:33 print ‘downloaded page...‘,34 35 url=‘http://www.cnblogs.com‘36 savedFile=‘./index.html‘37 38 #网络连接超时的时候下载下一个39 try:40 urllib.urlretrieve(url,savedFile,cb)41 print savedFile42 except socket.timeout:43 print ‘timeout.‘44 urllib.urlretrieve(url,savedFile,cb)45 print savedFile46 47 #读取下载的首页文件48 f=open(savedFile,‘r‘)49 lines=f.readlines()50 f.close()51 52 #下载文章链接的函数53 ‘‘‘54 用global在函数中引用外部全局变量55 ‘‘‘56 i=157 def downLink(pageLink):58 global i59 artiPage=‘./%s/%s%d.%s‘%(dir,‘page‘,i,‘html‘)60 try:61 urllib.urlretrieve(pageLink,artiPage,cb)62 print artiPage63 except socket.timeout:64 print ‘timeout‘65 urllib.urlretrieve(pageLink,artiPage,cb)66 print artiPage67 i=i+168 69 for line in lines:70 match = re.search(pattern,line)71 if match:72 arrstr=match.string.split(‘"‘) #按照引号分割73 link=arrstr[3]74 downLink(link)75 76 titlePattern=‘<title>‘77 pagePattern=‘page‘78 79 saveddir=‘./%s/‘%dir80 filelists=os.listdir(saveddir)81 82 for file in filelists:83 match=re.search(pagePattern,file)84 if match:85 filename=‘./%s/%s‘%(dir,match.string)86 f=open(filename)87 lines=f.readlines()88 for line in lines:89 titleMatch=re.search(titlePattern,line)90 if titleMatch:91 s=titleMatch.string.split(‘-‘)92 author = s[1]93 title = s[0]94 title=title.split(‘>‘)95 title=title[1]96 newname=‘./%s/%s-%s.html‘%(dir,title,author)97 os.rename(filename,newname)98 break99 f.close()
主要学习到的内容:
1.格式化时间
1 import time2 ISOTIMEFORMAT=‘%Y-%m-%d-%X‘3 times=time.strftime( ISOTIMEFORMAT, time.localtime() )
2.urllib网络连接超时
1 import socket 2 import urllib 3 def cb(a,b,c): 4 per=100.0*a*b/c 5 if per>100: 6 print ‘downloaded page...‘, 7 8 url=‘http://www.cnblogs.com‘ 9 savedFile=‘./index.html‘10 11 #网络连接超时的时候下载下一个12 try:13 urllib.urlretrieve(url,savedFile,cb)14 print savedFile15 except socket.timeout:16 print ‘timeout.‘17 urllib.urlretrieve(url,savedFile,cb)18 print savedFile
3.urllib下载并保存页面到文件
import urllibdef cb(a,b,c): per=100.0*a*b/c if per>100: print ‘downloaded page...‘,url=‘http://www.cnblogs.com‘savedFile=‘./index.html‘#网络连接超时的时候下载下一个try: urllib.urlretrieve(url,savedFile,cb) print savedFileexcept socket.timeout: print ‘timeout.‘ urllib.urlretrieve(url,savedFile,cb) print savedFile
4.字符串和数字拼接成字符串
artiPage=‘./%s/%s%d.%s‘%(dir,‘page‘,i,‘html‘)
5.函数中使用外部变量
1 在函数开头声明全局变量 2 i=1 3 def downLink(pageLink): 4 global i 5 artiPage=‘./%s/%s%d.%s‘%(dir,‘page‘,i,‘html‘) 6 try: 7 urllib.urlretrieve(pageLink,artiPage,cb) 8 print artiPage 9 except socket.timeout:10 print ‘timeout‘11 urllib.urlretrieve(pageLink,artiPage,cb)12 print artiPage13 i=i+1
6.正则筛选字符串行
1 import re2 pattern=‘<h3>‘3 for line in lines:4 match = re.search(pattern,line)5 if match:6 arrstr=match.string.split(‘"‘) #按照引号分割7 link=arrstr[3]8 downLink(link)
7.列出目录下的文件和文件夹
1 import os2 saveddir=‘./%s/‘%dir3 filelists=os.listdir(saveddir)
8.重命名文件
1 for line in lines: 2 titleMatch=re.search(titlePattern,line) 3 if titleMatch: 4 s=titleMatch.string.split(‘-‘) 5 author = s[1] 6 title = s[0] 7 title=title.split(‘>‘) 8 title=title[1] 9 newname=‘./%s/%s-%s.html‘%(dir,title,author)10 os.rename(filename,newname)11 break
python爬取博客园首页文章
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。