python爬虫(简单版)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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动态加载之类的,遇到这些东西,要爬的话,需要做更多更多的工作,当然,这么好玩的东西,做再多工作都是值得的。

以上是关于python爬虫(简单版)的主要内容,如果未能解决你的问题,请参考以下文章

scrapy主动退出爬虫的代码片段(python3)

Python爬虫|有道翻译(简易版)

简单的新浪微博爬虫-Python版-(下载部分)---(上)

爬虫遇到头疼的验证码?Python实战讲解弹窗处理和验证码识别

爬虫简单总结

1121 爬虫简单面条版