首页 > 代码库 > 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-%X12 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.com36 savedFile=./index.html37 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 timeout65         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=page78 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-%X3 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.html10 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.comsavedFile=./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 timeout11         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爬取博客园首页文章