【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

已经不打印了

posted @ 2018-03-22 12:02  OLIVER_QIN  阅读(617)  评论(0编辑  收藏  举报