python 爬虫学习笔记2

接着上一篇笔记

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

下面是抓取的结果

时间: 2024-12-17 20:29:33

python 爬虫学习笔记2的相关文章

python 爬虫学习笔记1

经过一段时间的学习,终于入了门 先爬一个csdn 的blog练练手 整体思路是首先判断某个blog有多少页 然后根据页数 去获得相应的url 再爬出每一页的title和对应的url 这里使用了BeautifulSoup来解析页面 #coding=utf-8 import urllib2 from bs4 import BeautifulSoup import sys reload(sys) sys.setdefaultencoding('utf-8') def query_item(input,

Python爬虫学习笔记1

加入实验室,要写爬虫,以前写过java的,新学python练练手 首先是发包程序,框架如下: 首先是POST方式,代码如下: 1 import urllib 2 import urllib2 3 url='http://someserver.com/cgi-bin/register.cgi' 4 user_agent='Mozilla/4.0' 5 values={ 6 'name':'Liuyuqing', 7 'location':'DUT', 8 'language':'python' 9

Python爬虫学习笔记——豆瓣登陆(一)

#-*- coding:utf-8 -*- import requests from bs4 import BeautifulSoup import html5lib import re import urllib url1 = 'http://accounts.douban.com/login' url2 = 'http://www.douban.com/people/*****/contacts' formdata={ "redir":"http://www.douban

【Python爬虫学习笔记(1)】urllib2库相关知识点总结

1. urllib2的opener和handler概念 1.1 Openers: 当你获取一个URL你使用一个opener(一个urllib2.OpenerDirector的实例).正常情况下,我们使用默认opener:通过urlopen.但你能够创建个性的openers.可以用build_opener来创建opener对象.一般可用于需要处理cookie或者不想进行redirection的应用场景(You will want to create openers if you want to f

【Python爬虫学习笔记(2)】Beautiful Soup库相关知识点总结

1. Beautiful Soup简介     Beautiful Soup是将数据从HTML和XML文件中解析出来的一个python库,它能够提供一种符合习惯的方法去遍历搜索和修改解析树,这将大大减少爬虫程序的运行时间.     Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码.你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了.然后,你仅仅需要说明一下原始编码方式就可以了.     B

Python爬虫学习笔记(一)

1.urllib2简介 urllib2的是爬取URL(统一资源定位器)的Python模块.它提供了一个非常简单的接口,使用urlopen函数.它能够使用多种不同的协议来爬取URL.它还提供了一个稍微复杂的接口,用于处理常见的情况 - 如基本身份验证,cookies,代理等. 2.抓取URLs 使用urlib2的简单方式可以像下面一样: import urllib2 response = urllib2.urlopen('http://python.org/') html = response.r

【Python爬虫学习笔记(3)】正则表达式(re模块)相关知识点总结

1. 正则表达式     正则表达式是可以匹配文本片段的模式. 1.1 通配符     正则表达式能够匹配对于一个的字符串,可以使用特殊字符创建这类模式.(图片来自cnblogs) 1.2 特殊字符的转义     由于在正则表达式中,有时需要将特殊字符作为普通字符处理,就需要用'\'进行转义,例如'python\\.org'就会匹配'python.org',那么为什么要用两个反斜杠呢,原因在于需要进行两层转义,首先是re模块表示正则表达式中需要转义一次,其次是python解释器即python的语

python网络爬虫学习笔记

python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章目录 1. 介绍: 2. 从简单语句中开始: 3. 传送数据给服务器 4. HTTP头-描述数据的数据 5. 异常 5.0.1. URLError 5.0.2. HTTPError 5.0.3. 处理异常 5.0.4. info和geturl 6. Opener和Handler 7. Basic Authentication 8. 代理 9. Timeout 设置 10. Cookie 11. Deb

Python爬虫学习系列教程

Python爬虫学习系列教程 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多.学习过程中我把一些学习的笔记总结下来,还记录了一些自己实际写的一些小爬虫,在这里跟大家一同分享,希望对Python爬虫感兴趣的童鞋有帮助,如果有机会期待与大家的交流. Python版本:2.7 一.爬虫入门 1. Python爬虫入门一之综述 2. Python爬虫入门二之爬虫基础了解 3. Python爬虫入门三之Urllib库的基本使用 4. Python爬虫入门四之Urllib库