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

  • 相关阅读:
    jQuery对象和DOM对象
    虚拟主机的部署(Apache)
    事件流:事件冒泡和事件捕获
    ThinkPHP
    级联下拉列表
    今日份抽自己!!!
    c++中关于输入字符数组的一些问题
    今日新知(关于递归中变量的声明)
    格子游戏(并查集)
    1.3-14大象喝水
  • 原文地址:https://www.cnblogs.com/Xw-liang/p/5155022.html
Copyright © 2011-2022 走看看