python 爬虫学习笔记2
2015-08-18 11:33
891 查看
接着上一篇笔记
这次将该blog的所有文章都下载下来
思路为根据dict中的url去解析网页
并将其中的博文部分获取并下载下来
下面是抓取的结果
这次将该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://images0.cnblogs.com/blog2015/793915/201508/181131443006108.png)
相关文章推荐
- 【Python】Windows平台下Python、Pydev连接Mysql数据库
- vijos - P1447开关灯泡 (大数模板 + 找规律 + 完全数 + python)
- python模块SocketServer
- python中 try、except、finally 的执行顺序
- python抓包
- Python每日一个小程序
- python第二天学习笔记
- 【Python学习笔记】-生成激活码
- python换行
- 零基础学python-5.6 数字位操作与其他工具
- 零基础学python-5.6 数字位操作与其他工具
- 零基础学python-5.5 数字的各种进制
- 零基础学python-5.5 数字的各种进制
- 零基础学python-5.4 数字精度与复数
- 零基础学python-5.4 数字精度与复数
- 零基础学python-5.3 数字变量与除法
- 零基础学python-5.3 数字变量与除法
- 零基础学python-5.2 数字表达式操作符
- 零基础学python-5.2 数字表达式操作符
- 用python脚本遍历下载网站文件夹