码迷,mamicode.com
首页 > 编程语言 > 详细

python 爬虫学习笔记2

时间:2015-08-18 13:37:21      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

接着上一篇笔记

这次将该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

下面是抓取的结果

技术分享

python 爬虫学习笔记2

标签:

原文地址:http://www.cnblogs.com/csy2994/p/4738946.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!