python爬虫(简单版)

学过python的帅哥都知道,爬虫是python的非常好玩的东西,而且python自带urllib、urllib2、requests等的库,为爬虫的开发提供大大的方便。

这次我要用urllib2,爬一堆风景图片。

先上重点代码

1     response = urllib2.urlopen(url).read()
2     soup = BeautifulSoup(
3         response,               # html字符串
4         'html.parser',          # html解析器
5         from_encoding='utf-8'   # 字符编码
6     )

 

其中,urlopen就顾名思义了,可以简单理解为打开一个url,然后获得该URL相对应的东西在python里的对象,然后通过read之后,就得到了页面的所有构成元素了

1 if __name__=='__main__':
2     s = urllib2.urlopen('http://www.baidu.com/')
3     print(s.read(100))

read可以传参数,在这里是读取100个字符,结果如下:

 

 

然后上面重点代码里的soup是一个BeautifulSoup对象,是一个第三方的用于html页面内容解析的库,当创建了一个BeautifulSoup对象之后,就可以用这个对象对html的内容进行解析,比如:

1 attr = {
2     'class':'pic',
3 }
4 nodes = soup.find_all('a',attr)

find_all()函数是查找所有符合参数条件的元素,上面的代码就是查找所有类名为pic的a元素,除了find_all之外,还有一个find元素,是查找符合条件的第一个元素,知道这两个函数之后,已经可以爬东西了。

import urllib2
from bs4 import BeautifulSoup
def spider_image(url,pre_filename):
    response = urllib2.urlopen(url).read()
    soup = BeautifulSoup(
        response,               # html字符串
        'html.parser',          # html解析器
        from_encoding='utf-8'   # 字符编码
    )
    attr = {
        'class':'pic',
        # 'page':'2'
    }
    nodes = soup.find_all('a',attr)
    url_list = set()
    for node in nodes:
        try:
            url_list.add(node['href'])
        except:
            pass
    for url in url_list:
        img_html = urllib2.urlopen(url).read()
        soup = BeautifulSoup(
            img_html,        # html字符串
            'html.parser',          # html解析器
            from_encoding='utf-8'   # 字符编码
        )
        img_url = soup.find('img',id="imgView")
        img_name = img_url['alt']
        try:
            img = urllib2.urlopen(img_url['src']).read()
            print(u'正在下载图片:'+img_name)
            fout = open(pre_filename+img_name+'.jpg','wb')

            fout.write(img)
            fout.close()
        except Exception as e:
            print(e)
            pass

def mkdir(path):
    # 引入模块
    import os

    # 去除首位空格
    path=path.strip()
    # 去除尾部 \ 符号
    path=path.rstrip("\\")

    # 判断路径是否存在
    # 存在     True
    # 不存在   False
    isExists=os.path.exists(path)
    # 判断结果
    if not isExists:
        # 如果不存在则创建目录
        print path+' 创建成功'
        # 创建目录操作函数
        os.makedirs(path)
        return True
    else:
        # 如果目录存在则不创建,并提示目录已存在
        print path+' 目录已存在'
        return False



if __name__=='__main__':
    url_list = [
        'http://www.tooopen.com/img/90_894.aspx'
    ]
    i = 1
    for url in url_list:
        print(u'现在开始下载第'+str(i)+u'个网站的图片')
        # 定义要创建的目录
        mkpath='F:\\spider'+str(i)
        # 调用函数
        mkdir(mkpath)
        spider_image(url,'F://spider//spider_image'+str(i)+'//')
        i = i + 1

爬图片的话,其实就是读取到图片之后,转成二进制数据之后,写入文件就行了,然后运行就可以了,然后就看到一堆图片在目录里

当然,这算是最基础,什么情况都没遇到,超顺利,随着你想爬更多东西,会发现有很多反爬虫的东西,比如cookie,验证码,ajax动态加载之类的,遇到这些东西,要爬的话,需要做更多更多的工作,当然,这么好玩的东西,做再多工作都是值得的。

posted @ 2016-01-24 13:31  L_Sivan  阅读(536)  评论(0编辑  收藏  举报