zoukankan      html  css  js  c++  java
  • 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动态加载之类的,遇到这些东西,要爬的话,需要做更多更多的工作,当然,这么好玩的东西,做再多工作都是值得的。

  • 相关阅读:
    手机号码正则表达式
    POJ 3233 Matrix Power Series 矩阵快速幂
    UVA 11468
    UVA 1449
    HDU 2896 病毒侵袭 AC自动机
    HDU 3065 病毒侵袭持续中 AC自动机
    HDU 2222 Keywords Search AC自动机
    POJ 3461 Oulipo KMP模板题
    POJ 1226 Substrings KMP
    UVA 1455 Kingdom 线段树+并查集
  • 原文地址:https://www.cnblogs.com/Xw-liang/p/5155022.html
Copyright © 2011-2022 走看看