【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中查看运行结果,如下:
这些信息就是浏览器接受到的信息,只不过我们在看浏览器内容的时候,浏览器对这些内容进行了转换,让我们看着更舒服
或许你从上面可以看出,虽然我们已经成功获取了信息,但是这些信息都是二进制的,看起来很不方便,那么我们如何处理呢?
我们可以通过decode()命令将网页的信息进行解码,并显示出来
首先,我们查看网页的源码,查看原本网页编码格式
我们看到是GBK,那接下来我们开始转码
转码后,我们看到得到的结果跟我们查看源码的结果是一致的
自动获取编码格式
获取有人觉得上述获取编码格式的方法太麻烦了,那么如何自动获取编码格式呢?
使用chardet类库即可
也可以直接在DOS窗口输入命令在线安装
自动获取编码格式代码示例
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)
运行程序,输结果:
同时呢,加入我们现在有很多网页,那么我们不可能一一去看,我们在这就可以想到把这个第三方库封装为一个函数,然后遍历多个网页即可
下面是我封装遍历的一个例子:
# -*- 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)
运行结果
盲点
程序中我新增了__name__=="__main__"这段代码
解释:
__name__ 是当前模块名,当模块被直接运行时模块名为 __main__ 。这句话的意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行
例如:
我们现在有文件const.py
另外还存在一个计算和sm.py的文件
现在他导入模块const,并且也运行了const中的print语句了,我们在const中添加__name__=="__main__"
再次运行sm.py
已经不打印了
声明:书写博客不易,转载请注明出处,请支持原创,侵权将追究法律责任
个性签名:人的一切的痛苦,本质上都是对自己无能的愤怒
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!