这几天一直在学用python爬网页 , 现在是用urllib2,cookie等模块获取了csdn的博客源码,然后打算把所有博客都保存到本地;这就涉及到了解析html, 由于对正则的理解不太深。。。就用了第三方工具模块:美丽的汤---BeautifulSoup ,可以自己百度安装,使用教程,很容易上手: 代码不健壮。。主要是容易出现乱码。。 有时候遇到全角的时候也会出bug,以后再完善吧。
先贴张保存到本地的图:
源码如下:希望那里写的不好,多多指正。。一块学习。PS:后来才知道,这可以刷访问量(非本意。。。)
# -*- coding: utf-8 -*-
import urllib,urllib2,cookielib,re,socket
import os,sys,time
from bs4 import BeautifulSoup
#防止编码乱码#
reload(sys)
sys.setdefaultencoding('utf-8')
####
url='http://blog.csdn.net/shomy_liu'# csdn的账号
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0'
}
#读取htmml
def login(url=url):
#socket.setdefaulttim #单位为秒
time.sleep(0.5)# 防止封IP
req= urllib2.Request(url=url,headers=headers)
return urllib2.urlopen(req).read()
state=True
html=login()
while state:
soup=BeautifulSoup(html)
articals=soup.findAll('div',{'class' : 'list_item article_item'})
for artical in articals:
title=artical.find('a')
artical_url='http://blog.csdn.net/'+title['href']
s=title.text.replace('\r\n',' ')#去掉回车符
print s
s=s.lstrip()#去掉首空格
s=s.rstrip()#去掉尾空格
f=file("D:\\study\\python\\py\\csdn_blog\\shomy_liu\\"+s+'.htm', 'w')#保存的目录
f.write(login(artical_url))
f.close()
#print artical_url
##换页转换
pagelist= soup.find(name='div',id='papelist')
next=pagelist.findAll('a')
state=False
for i in next :
if i.text.encode('utf-8')==str('下一页') :
url='http://blog.csdn.net/'+i['href']
html=login(url)
state=True
break;