Python爬虫基础1-获取网页
Python爬虫基础1-获取网页
什么是爬虫
爬虫:获取网络数据、资源的程序。不仅可以使用python,也可以使用java,c++等语言编写,但是python编写爬虫简单省力,因此收到青睐。
合法爬取:
- 爬取人工能通过正常途径获取的内容
- 不要影响网站的正常运行
rebots.txt协议:君子协议,说明了网站希望爬虫爬取的内容以及不希望网站爬取的内容,比较大型的网站可以在域名后面加上/robots.txt访问,大多可以看到这个文件。
一般流程:
- 请求所需要的网络资源
- 过滤所需要的数据
- 保存数据或者处理结果
HTTP响应
HTTP响应的结构:
1<HTTP version number> <status code> <reason phrase>
2Response Headers
3
4Response Body
例如:
1HTTP/1.1 200 OK
2Bdpagetype: 2
3Bdqid: 0xd6b1f91b001a7eea
4Cache-Control: private
5Connection: keep-alive
6Content-Encoding: gzip
7Content-Type: text/html;charset=utf-8
8
9<!DOCTYPE html><!--STATUS OK-->
10 <html><head><meta http-equiv="Content-Type"
11 …………
状态码:
- 200 成功
- 404 not found 资源找不到
- 403 没有权限
- 505 服务器内部错误
- 301 302 重定向
Headers:
关注 content-type,表示了访问资源的格式。常见的有text/html,image/jpeg,application/javascript等。有时候会在这里直接说明使用的字符集(编码格式)
响应体:
根据相应内容的格式,可以承载不同的信息,图片、文档、视频等,使用字节流的方式传输。
编码
字节流:是计算机传输、存储数据的形式。信息翻译为字节流的过程成为编码,字节流翻译为信息的过程称为解码。
在网络上传输的文档内容也是字节流的形式,如果要被人类阅读,必须使用和编码时相同的字符集进行解码。不解码有时候就无法看到中文等复杂的字符,而使用了错误的字符集解码就会产生乱码。
第一个爬虫
爬取百度页面,可以使用python中自带的urllib库,也可以安装更常用的requests库。
使用urllib库
示例代码:
1# 引入
2from urllib.request import urlopen
3
4# 请求,得到响应对象
5response = urlopen("http://www.baidu.com")
6# 读取回应内容
7content = response.read()
8# 解码
9content = content.decode("utf-8")
10print(content)
11
12# 存储到文件中
13# 这里采用的utf-8指的是编码时使用的字符集,程序会按照utf-8格式将字符翻译为字节流存储
14with open("baidu.html", mode="w", encoding="utf-8") as file:
15 file.write(content)
使用requests库
第一次使用的时候要先安装:
1pip install requests
如果下载速度较慢,可以使用下面的方式,借助国内的镜像源下载:
1pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
然后就可以使用requests库进行网页请求:
1# 引入
2import requests
3
4# get方法请求
5response = requests.get("http://www.baidu.com")
6print(response)
7# 获取响应头
8print(response.headers)
9# 获取请求体,并解码
10print(response.content.decode("utf-8"))