• 【Python3 爬虫】01_简单页面抓取


    运行平台:Winodows 10

    Python版本:Python 3.4.2

    IDE:Sublime text3

    网络爬虫

    网络爬虫,也叫网络蜘蛛(Web Spider),如果把互联网比喻成一个蜘蛛网,Spider就是一只在网上爬来爬去的蜘蛛。网络爬虫就是根据网页的地址来寻找网页的,也就是URL。举一个简单的例子,我们在浏览器的地址栏中输入的字符串就是URL,例如:https://www.baidu.com/

    URL就是统一资源定位符(Uniform Resource Locator),遵守以下语法规则:

    scheme://host.domain:port/path/filename

    解释:

    • scheme - 定义因特网服务的类型。最常见的类型是 http
    • host - 定义域主机(http 的默认主机是 www)
    • domain - 定义因特网域名,比如 baidu.com
    • :port - 定义主机上的端口号(http 的默认端口号是 80)
    • path - 定义服务器上的路径(如果省略,则文档必须位于网站的根目录中)。
    • filename - 定义文档/资源的名称

    第一个爬虫

    爬虫例子

    我们以爬取163首页为例子(网址:http://www.163.com/

    #-*- coding:utf-8 -*-
    """
    Author  :OLIVER
    Date    :2018-03-22
    Describe:简单爬虫
    """
    from urllib import request
    
    if __name__=="__main__":
    	response = request.urlopen("http://www.163.com/")
    	html = response.read()
    	print(html)

    urllib使用使用request.urlopen()打开和读取URLs信息,返回的对象response如同一个文本对象,我们可以调用read(),进行读取。再通过print(),将读到的信息打印出来。

       运行程序ctrl+B,可以在Sublime中查看运行结果,如下:

    image

    这些信息就是浏览器接受到的信息,只不过我们在看浏览器内容的时候,浏览器对这些内容进行了转换,让我们看着更舒服

    或许你从上面可以看出,虽然我们已经成功获取了信息,但是这些信息都是二进制的,看起来很不方便,那么我们如何处理呢?

    我们可以通过decode()命令将网页的信息进行解码,并显示出来

    首先,我们查看网页的源码,查看原本网页编码格式

    image

    我们看到是GBK,那接下来我们开始转码

    image

    转码后,我们看到得到的结果跟我们查看源码的结果是一致的

    image

    自动获取编码格式

    获取有人觉得上述获取编码格式的方法太麻烦了,那么如何自动获取编码格式呢?

    使用chardet类库即可

    image

    也可以直接在DOS窗口输入命令在线安装

    image

    自动获取编码格式代码示例

    from urllib import request
    import chardet
    
    if __name__=="__main__":
    	response = request.urlopen("http://www.163.com/")
    	html = response.read()
    	charset = chardet.detect(html)
    	print(charset)
    

    运行程序,输结果:

    image

    同时呢,加入我们现在有很多网页,那么我们不可能一一去看,我们在这就可以想到把这个第三方库封装为一个函数,然后遍历多个网页即可

    下面是我封装遍历的一个例子:

    # -*- coding:UTF-8 -*-
    
    from urllib import request
    import chardet
    
    def auto_GetCharset(url):
        response = request.urlopen(url)
        html = response.read()
        charset = chardet.detect(html)
        value = charset['encoding']
        return value
    
    """
        定义一个列表,然后依次查看列表元素的编码格式
    """
    Web_list = ["http://www.baidu.com/",
                "http://www.163.com/",
                "https://www.jd.com/",
                "https://www.youku.com/"]
    for url in Web_list:
        charset = auto_GetCharset(url)
        print(url,charset)

    运行结果

    image

    盲点

    程序中我新增了__name__=="__main__"这段代码

    解释:

    __name__ 是当前模块名,当模块被直接运行时模块名为 __main__ 。这句话的意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行

    例如:

    我们现在有文件const.py

    image

    另外还存在一个计算和sm.py的文件

    image

    现在他导入模块const,并且也运行了const中的print语句了,我们在const中添加__name__=="__main__"

    image

    再次运行sm.py

    image

    已经不打印了

  • 相关阅读:
    关于使用_bstr_t的一个坑
    ubuntu下使用sublime text进行C编程开发尝鲜
    [转]在ubuntu下安装sublime text
    [转] COM编程总结
    [转]wcout输出中文却不显示出来
    理解抽象类与接口
    软件设计原则[总结]
    [转] 在图标库中,找到合适的图标 ico
    [转]单播、多播(组播)、广播简介
    NUC970开发资源
  • 原文地址:https://www.cnblogs.com/OliverQin/p/8622737.html
Copyright © 2020-2023  润新知