标签:
接着上一篇笔记
这次将该blog的所有文章都下载下来
思路为根据dict中的url去解析网页
并将其中的博文部分获取并下载下来
#coding=utf-8 import urllib2 import urllib from bs4 import BeautifulSoup import sys reload(sys) sys.setdefaultencoding(‘utf-8‘) def query_item(input,tag=None,cla=None): ‘‘‘ 获取对应url中 div标签 class的对象 返回的是set对象p ‘‘‘ soup=BeautifulSoup(input,"html.parser") if cla==None: if tag == None: return soup.find_all(‘div‘) else: return soup.find_all(tag) else: if tag == None: return soup.find_all(‘div‘,class_=cla) else: return soup.find_all(tag,class_=cla) req_header = { ‘Host‘:"blog.csdn.net", ‘User-Agent‘:"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36", ‘Accept‘:"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", ‘Accept-Language‘:"zh-CN,zh;q=0.8", ‘Connection‘:"keep-alive", "Cache-Control":"max-age=0", "Referer":"http://blog.csdn.net"} blog_art=[] i=1 #该循环是获取最大页面数,并将获取的页面放入一个list中 while True: url="http://blog.csdn.net/zhaoyl03/article/list/" req=urllib2.Request(url+str(i),None,req_header) result = urllib2.urlopen(req,None) artcle_num=query_item(result.read(),‘div‘,‘list_item article_item‘) if len(artcle_num)<15: for x in artcle_num: blog_art.append(x) break else: i+=1 for x in artcle_num: blog_art.append(x) #现在得到blog的有效页数 i 和所有的博文 blog_art host_url=‘http://blog.csdn.net‘ query_result={} for x in blog_art: for y in x.find(‘span‘,‘link_title‘): #得到所有博文的title query_result[str(y.get_text())]=str(host_url+y.get(‘href‘)) ‘‘‘ query_result是标题:url的字典 下面根据这个字典将每个博文的内容爬出来 保存在本地 ‘‘‘ a=1 time=‘‘ for x,y in query_result.items(): temp_req=urllib2.Request(y,None,req_header) temp_result=urllib2.urlopen(temp_req,None) for i in query_item(temp_result,‘div‘,‘article_content‘): # f=open(‘d:\\csdn\\%s.html‘ % str(x.strip()),‘w‘)#有问题 无法将博文标题作为文件名写入 f=open(‘d:\\csdn\\%s.html‘% a,‘w‘) f.write(‘‘‘<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head>‘‘‘) f.write(str(x)) for j in i: f.writelines(str(j)) f.close() a+=1
下面是抓取的结果
标签:
原文地址:http://www.cnblogs.com/csy2994/p/4738946.html