python爬虫基础--1

本文介绍了网络爬虫的定义,即根据网页地址(URL)寻找网页,并说明了URL的格式组成。还介绍了Python内置的HTTP请求库Urllib,包含request、error、parse、robotparser四个模块。最后给出两个实例,一是使用request.urlopen()获取网页信息并解码,二是用chardet库自动获取网页编码方式。

1,网络爬虫的定义

网络爬虫就是根据网页的地址来寻找网页的,也就是URL。
URL就是同意资源定位符(Uniform Resource Locator),它的一般格式如下(带方括号[]的为可选项):

protocol:// hostname[:port] / path / [;parameters][?query]#fragment

URL的格式由三部分组成:

(1)protocol:第一部分就是协议,例如百度使用的就是https协议;

(2)hostname[:port]:第二部分就是主机名(还有端口号为可选参数),一般网站默认的端口号为80,例如百度使用www.baidu.com,这个就是服务器的地址;

(3)path:第三部分就是主机资源的具体地址,如目录和文件名等。

2,Urllib库介绍

Urllib 库,它是 Python 内置的 HTTP 请求库。它包含四个模块:

<1>request,它是最基本的 HTTP 请求模块,我们可以用它来模拟发送请求,就像在浏览器里输入网址然后敲击回车一样,只需要给库方法传入 URL 还有额外的参数,就可以模拟实现这个过程了。

<2>error 模块即异常处理模块,如果出现请求错误,我们可以捕获这些异常,然后进行重试或其他操作保证程序不会意外终止。

<3>parse 模块是一个工具模块,提供了许多 URL 处理方法,比如拆分、解析、合并等等的方法。

<4>robotparser模块用来解析robots.txt文本文件.它提供了一个单独的RobotFileParser类,通过该类提供的can_fetch()方法测试爬虫是否可以下载一个页面。

3,实例

实例1:使用request.urlopen()接口函数

from urllib import request

if __name__ == "__main__":
    response = request.urlopen("http://fanyi.baidu.com")
    html = response.read()
    print(html)

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

打印出来的信息其实就是浏览器接收到的信息,只不过我们在使用浏览器的时候,浏览器已经将这些信息转化成了界面信息供我们浏览。

问题:虽然我们已经成功获取了信息,但是显然他们都是二进制的乱码,看起来很不方便
我们可以通过简单的decode()命令将网页的信息进行解码,并显示出来。

from urllib import request

if __name__ == "__main__":
    response = request.urlopen("http://fanyi.baidu.com")
    html = response.read()
    html=html.decode("utf-8")
    print(html)

当然这个前提是我们已经知道了这个网页是使用utf-8编码的。可以使用使用浏览器审查元素,只需要找到head标签开始位置的chareset,就知道网页是采用何种编码的,但是这需要我们每次都打开浏览器,并找下编码方式,显然有些费事

实例二:自动获取网页编码方式

可以安装第三方库chardet,它是用来判断编码的模块
pip install chardet

安装好后,我们就可以使用chardet.detect()方法,判断网页的编码方式了

from urllib import request
import chardet

if __name__ == "__main__":
    response = request.urlopen("http://fanyi.baidu.com")
    html = response.read()
    charset = chardet.detect(html)
    print(charset)
    #获取到一个字典{'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}
    print(charset['encoding'])
#utf-8
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值