python抓取简单网页_【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 - 定义文档/资源的名称

第一个爬虫

爬虫例子

#-*- 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中查看运行结果,如下:

832918-20180322120127326-85752813.png

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

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

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

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

832918-20180322120128715-66896926.png

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

832918-20180322120130116-258390306.png

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

832918-20180322120132500-1499586378.png

自动获取编码格式

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

使用chardet类库即可

832918-20180322120133661-1519550578.png

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

832918-20180322120134799-1254351595.png

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

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)

运行程序,输结果:

832918-20180322120135791-725642660.png

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

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

#-*- coding:UTF-8 -*-

from urllib importrequestimportchardetdefauto_GetCharset(url):

response=request.urlopen(url)

html=response.read()

charset=chardet.detect(html)

value= charset['encoding']returnvalue"""定义一个列表,然后依次查看列表元素的编码格式"""Web_list= ["http://www.baidu.com/","http://www.163.com/","https://www.jd.com/","https://www.youku.com/"]for url inWeb_list:

charset=auto_GetCharset(url)print(url,charset)

运行结果

832918-20180324232104667-1587091075.png

盲点

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

解释:

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

例如:

我们现在有文件const.py

832918-20180322120136841-743214625.png

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

832918-20180322120138279-395670702.png

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

832918-20180322120139611-825148749.png

再次运行sm.py

832918-20180322120140751-137861051.png

已经不打印了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值